2016-08-02 4 views
0

Если у меня есть компонент, например <Foo />, которая делает что-то вроде этого:Реакция: Можно ли передать компонент другому компоненту через реквизит?

<div> 
    <Bar /> 
    {/* ... */} 
</div> 

было бы возможно передать адвокатуры как свойство Foo? <Foo Bar={Bar}/>. Так что я могу ссылаться на панель во время визуализации Foo:

render() { 
    const Bar = this.props.Bar; 
    return (
    <div> 
     <Bar /> 
     {/* ... */} 
    </div> 
); 
} 

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

Причина, по которой я хотел бы сделать что-то вроде этого, заключается в том, что я хочу протестировать компонент и думал о том, как вводить поддельные зависимости в компонент. Для проекта я думал об использовании Preact, который не работает с мелким рендером, поэтому я думал о том, что, возможно, сделал какую-то инъекцию зависимости.

Прохождение через компоненты, которые использует компонент, позволит мне подделать их во время тестирования, пропуская макеты.

Это хорошая идея? Или не на самом деле путь? ...

+0

HOC будет лучшей альтернативой воспроизведению подобного поведения. В этой статье очень хорошо описывается такой подход. https://medium.com/@franleplant/react-higher-order-components-in-depth-cf9032ee6c3e#.r4mbzunhu – Deadfish

ответ

1

Я не знаю, почему это может быть плохой идеей.

При создании Реагировать компонент, вы строите Javascript объект с некоторым синтаксисом (JSX), который будет переведен на обычный Javascript. Итак, прохождение React компонент как пройти любой Javascript объект.

Информация о данном товаре react-router Проложить компонент в Маршрут.

+0

Правда, я это заметил. И свойство children - это набор компонентов. Но я не видел, чтобы предыдущий подход использовался, поэтому я немного неохотно об этом –

+0

эй, спасибо за ответ –

+1

Единственное, что я могу придумать здесь, это то, что он делает его менее читаемым. Здесь вам нужно будет проверить родительский компонент, чтобы узнать, какой элемент фактически создан здесь. Это будет намного более серьезной проблемой, если много компонентов создадут такую ​​разметку. (Масштабируемость/удобочитаемость) – magnudae

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