Javascript 将道具从容器组件传递到嵌套路由组件
如何在AppContainer和主组件之间共享状态? 例如,我希望将结果对象置于AppContainer状态,以便将其传递给所有其他组件 在这个应用程序中,我没有使用Redux 我尝试在AppContainer中使用React.cloneElement,但生成错误: 元素类型无效:应为字符串(对于内置组件) 或类/函数(用于复合组件),但得到:未定义。你 可能忘记了从定义组件的文件中导出组件 index.jsJavascript 将道具从容器组件传递到嵌套路由组件,javascript,reactjs,react-router,Javascript,Reactjs,React Router,如何在AppContainer和主组件之间共享状态? 例如,我希望将结果对象置于AppContainer状态,以便将其传递给所有其他组件 在这个应用程序中,我没有使用Redux 我尝试在AppContainer中使用React.cloneElement,但生成错误: 元素类型无效:应为字符串(对于内置组件) 或类/函数(用于复合组件),但得到:未定义。你 可能忘记了从定义组件的文件中导出组件 index.js <Router history={browserHistory}>
<Router history={browserHistory}>
<AppContainer>
<Route path="/" component={Home} />
<Route path="search" component={Search} />
</AppContainer>
</Router>
render() {
return (
<div className="containerApp">
{this.props.children}
</div>
);
}
AppContainer.js
<Router history={browserHistory}>
<AppContainer>
<Route path="/" component={Home} />
<Route path="search" component={Search} />
</AppContainer>
</Router>
render() {
return (
<div className="containerApp">
{this.props.children}
</div>
);
}
render(){
返回(
{this.props.children}
);
}
反应。克隆元素是正确的选择。例如:
render() {
const childProps = {
prop1: this.state.prop1
}
return (
<div className="containerApp">
{React.cloneElement(this.props.children, childProps)}
</div>
);
}
render(){
常量childProps={
prop1:this.state.prop1
}
返回(
{React.cloneElement(this.props.children,childProps)}
);
}
如果这给了您之前收到的错误,那么我认为唯一的原因是,在任何路由匹配之前,AppContainer在没有任何子级的情况下被呈现。您可以通过在AppContainer中有条件地呈现来缓解此问题:
render() {
const childProps = {
prop1: this.state.prop1
}
const { children } = this.props;
return (
<div className="containerApp">
{children && React.cloneElement(children, childProps)}
</div>
);
}
render(){
常量childProps={
prop1:this.state.prop1
}
const{children}=this.props;
返回(
{children&&React.cloneElement(children,childProps)}
);
}
一般来说,从最佳实践的角度来看,这不是一个好主意(特别是因为您不使用Redux)。您能告诉我您想要实现什么吗?更有可能的是,有一种比通过路由器传递状态更好的方法。Ok。谢谢例如,在主组件中,我有一个搜索表单,检索结果,然后将结果添加到组件状态。但是我想在搜索组件中显示这些结果。告诉我我是否有更好的解释…我不认为你可以将状态从父组件传递到子组件的状态,要么你使用上下文(这很麻烦),要么你将状态作为道具传递给子组件。这很容易做到。为什么要把事情复杂化:POk,我明白。我怎样才能将状态作为道具传递给孩子?我试过React.cloneElement,但给我一个错误。提前谢谢