2016-11-30 2 views
0

У меня есть реактивный компонент (Parent), внутри которого есть другой компонент (Child), который обернут с использованием функции более высокого порядка (HOWrapper). Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда компонент Parent отображается, компонент Child размонтирует, а затем снова монтирует. Мне нужно найти способ, который предотвращает размонтирование компонента Child, но все равно продолжит его перенос в компонент, имя которого динамически назначается. Я также хочу, чтобы опция передавала дополнительные параметры функции HOWrapper, которая также может быть динамически сгенерирована в функции render()Parent. Есть идеи?Как использовать функцию более высокого порядка (или альтернативу) для упаковки компонента React без постоянной развязки компонента?

компонент Родитель:

import { HOWrapper } from './somepath'; 
import Child from './someotherpath'; 
export default class Parent extends Component { 
    ... 
    render(){ 

     let ChildWrapper = HOWrapper(Child); 

     return (
      <ChildWrapper {...this.props} /> 
     ); 
    } 
} 

функций высшего порядка:

export function HOWrapper(WrappedComponent) { 
    return class Blanket extends Component { 
     constructor(props) { 
      super(props); 
      this.state = { 
       ... 
      }; 
     } 

     ... 

     render() { 
      return (
       <WrappedComponent 
        {...this.props} 
       /> 
      ); 
     } 
    } 
} 
+0

Я не думаю, что вы используете HOC-компонент здесь. Почему вы не можете просто передать пользовательские реквизиты своему дочернему компоненту? В вашем примере вы не передаете какую-либо пользовательскую информацию в HOC, чтобы казалось, что вы можете просто экспортировать ребенка с помощью hoc, завернутого за один раз. – azium

+0

Не знаете, откуда вы пришли: сможете ли вы предоставить и ответить демонстрируя это? – JoeTidee

+0

Конечно, но я чувствую, что это будет неполным ответом, потому что вы не указали подробно, что вы пытаетесь сделать. – azium

ответ

1

Поскольку HOC возвращает компонент, более типичный подход к использованию их в один раз, когда их экспорт, а не на каждом визуализации вызова ,

let YourComponent = props => <div /> 
export default HOC(YourComponent) 

Тогда, если вы хотите сделать что-либо динамическое, перейдите на новые реквизиты.

render() { return <YourComponent dynamicProps={foo} /> }