2016-09-21 2 views
0

Как говорится в заголовке: что-то вроде псевдо-кода ниже считается плохой?Проходит компоненты, поскольку реквизит считается плохой практикой?

<Outer 
    a = { ComponentA } 
    b = { ComponentB } 
/> 

var Outer = (props) => { 
    var ComponentA = props.a; 
    var ComponentB = props.b; 

    // do fancy stuff 
    // ... 

    return (
     <div> 
      <ComponentA { ...fancypropsForA } /> 
      <ComponentB { ...fancypropsForB } /> 
     </div> 
    ); 
} 

В качестве примера: Я использую его для отображения данных дерева по-разному, пропуская компонент, который будет обрабатывать данные одного узла.

EDIT

В соответствии с просьбой, я буду стараться, чтобы сделать мой вопрос немного более ясно. Существует компонент, который имеет некоторую логику и некоторую разметку, которая одинакова при каждом использовании этого компонента. Но в этой разметке есть два (или более) места, которые должны быть заменяемыми.

Создайте календарь, который отображает целый месяц. Существует компонент, который отображает индивидуальную дату, и тот, который отображает рабочий день (в верхней строке). Вы хотите повторно использовать этот календарь в нескольких местах, но каждый раз вам нужна разная разметка для компонентов даты и недели.

Одним из способов достижения этой цели является:

<Calendar 
    data={ data } 
    weekdayComponent={ MyWeekDayComponent } 
    dateComponent={ MyDateComponent } 
/> 

<Calendar 
    data={ data } 
    weekdayComponent={ SomeOtherWeekDayComponent } 
    dateComponent={ SomeOtherDateComponent } 
/> 

Таким образом, я обнаружил, что это работает. Но я не уверен, что это действительно плохо.

ответ

1

Пока данные поступают только в одном направлении, вы, как правило, в порядке. Ваш пример немного ухищрен, поэтому трудно понять, какую общую проблему вы пытаетесь решить, но я думаю, что вы действительно ищете, это компоненты более высокого порядка.

https://medium.com/@franleplant/react-higher-order-components-in-depth-cf9032ee6c3e

+0

спасибо за ваши предложения; в то время как я не смог найти этот сценарий на конкретной странице, которую вы связали, я нашел ее в соответствующем документе на этой странице: https://facebook.github.io/react/docs/create-fragment.html есть даже proptype для этого – cdx

+0

в вашем редактировании вы удалили ссылку, которая мне действительно помогла. в отношении hocs: неинтересно ли иметь '<Данные дерева = {data} component = {MyNode} />' вместо 'var MyTree = withTree (MyNode); '? – cdx

+0

ОК, поэтому снова просмотрел документ proptypes, и я подумал, что я неверно истолковал «нулевой» проспект. но есть «React.PropTypes.element», а в docs указано «A React element», поэтому я предполагаю im fine then? – cdx

Смежные вопросы