Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将道具从容器组件传递到嵌套路由组件_Javascript_Reactjs_React Router - Fatal编程技术网

Javascript 将道具从容器组件传递到嵌套路由组件

Javascript 将道具从容器组件传递到嵌套路由组件,javascript,reactjs,react-router,Javascript,Reactjs,React Router,如何在AppContainer和主组件之间共享状态? 例如,我希望将结果对象置于AppContainer状态,以便将其传递给所有其他组件 在这个应用程序中,我没有使用Redux 我尝试在AppContainer中使用React.cloneElement,但生成错误: 元素类型无效:应为字符串(对于内置组件) 或类/函数(用于复合组件),但得到:未定义。你 可能忘记了从定义组件的文件中导出组件 index.js <Router history={browserHistory}>

如何在AppContainer和主组件之间共享状态?

例如,我希望将结果对象置于AppContainer状态,以便将其传递给所有其他组件

在这个应用程序中,我没有使用Redux

我尝试在AppContainer中使用React.cloneElement,但生成错误:

元素类型无效:应为字符串(对于内置组件) 或类/函数(用于复合组件),但得到:未定义。你 可能忘记了从定义组件的文件中导出组件

index.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>
    );
}

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,但给我一个错误。提前谢谢