#reactjs
#reactjs
Вопрос:
Я хочу передать реквизит компоненту, который передается как реквизит, подобный этому:
<Field
name="persons"
component={Persons}
/>
Я пробовал это, но это не сработало:
component={<Person prop={prop} />}
Как я могу заставить это работать?
Комментарии:
1. как вы будете использовать переданный компонент?
2. В виде диалогового окна / всплывающего окна, и я хочу передать статус показать / скрыть и функцию показать и скрыть
Ответ №1:
вы можете передать тип компонента и реквизит в двух разных свойствах
<Foo component={Bar} componentProps={...} />
затем в Foo
компоненте вы делаете это
render() {
const Component = this.props.component;
const props = this.props.componentProps;
return <div> ... <Component {...props}/> ...</div>
}
или вы можете передать функцию, которая отображает ваш компонент следующим образом
<Foo component={() => <Bar props />}/>
затем в Foo
компоненте вы делаете это
render() {
return <div> ... {this.props.component()} ...</div>
}
или вы можете сделать так, как вы предложили в вопросе, подобном этому
<Foo component={<Bar props/>}/>
затем в Foo
компоненте вы делаете это
render() {
return <div> ... {this.props.component} ...</div>
}
все зависит от того, как вы будете использовать переданный компонент в Foo
компоненте или, в вашем случае Field
, компонент
Комментарии:
1. @DennisVash вы знакомы с реквизитами рендеринга? reactjs.org/docs/render-props.html
2. Моя ошибка, вы правы, хотя у него другое поведение, просто проверил его
Ответ №2:
компонент — это не что иное, как функция, которая возвращает компонент react. когда вы это делаете <Person prop={prop} />
, вы фактически вызываете эту функцию в стиле jsx.
Поэтому вам нужно обернуть свой Person
компонент в другую функцию, которая возвращает Person
как:
// props here is in case <Field> pass some props to component
component={(props) => <Person {...props} prop={prop} />}