Reactjs 使用react路由器时,如何从子组件设置父组件的状态?

Reactjs 使用react路由器时,如何从子组件设置父组件的状态?,reactjs,react-router,Reactjs,React Router,我正在做一个React项目,在这个项目中,用户将收到一系列问题的提示,这些问题的答案将合并为一个要保存的对象 父组件包含多个子组件 比如说-- 不要使用组件道具来渲染子管线,而是使用渲染道具。这允许您让函数返回要呈现的组件,而不是简单地接受类本身。看起来是这样的: <Route path="Parent" component={Parent}> <Route path="Child1" render={() => {<Child1 someProp={foo

我正在做一个React项目,在这个项目中,用户将收到一系列问题的提示,这些问题的答案将合并为一个要保存的对象

父组件包含多个子组件

比如说--
不要使用
组件
道具来渲染子管线,而是使用
渲染
道具。这允许您让函数返回要呈现的组件,而不是简单地接受类本身。看起来是这样的:

<Route path="Parent" component={Parent}>
    <Route path="Child1" render={() => {<Child1 someProp={foo} />}} />
    <Route path="Child2" render={() => {<Child2 someProp={bar} />}} />
    <Route path="Child3" render={() => {<Child3 someProp={baz} />}} />
    <IndexRoute component={Child1} />
</Route>

{}} />
{}} />
{}} />
为什么要这样做呢?如您所见,现在可以将道具传递给渲染的子对象(在本例中,
someProp
)。现在你可以给孩子们传递道具了,这对孩子们来说是微不足道的


使用
渲染
道具,而不是使用
组件
来渲染子管线。这允许您让函数返回要呈现的组件,而不是简单地接受类本身。看起来是这样的:

<Route path="Parent" component={Parent}>
    <Route path="Child1" render={() => {<Child1 someProp={foo} />}} />
    <Route path="Child2" render={() => {<Child2 someProp={bar} />}} />
    <Route path="Child3" render={() => {<Child3 someProp={baz} />}} />
    <IndexRoute component={Child1} />
</Route>

{}} />
{}} />
{}} />
为什么要这样做呢?如您所见,现在可以将道具传递给渲染的子对象(在本例中,
someProp
)。现在你可以给孩子们传递道具了,这对孩子们来说是微不足道的


为了让父级从其子级获取数据,您需要将回调函数作为属性传递给该子级

callbackFunction(data) {
    // do something
}

<ChildComponent parentCallback={this.callbackFunction} />
有关更多详细信息,请参阅以下文章:


另一种选择是使用Redux之类的状态容器。在这种情况下,您的子组件将把值分派到一个状态,并且该状态正被其父组件监听,当状态更改时,父组件将重新呈现。这是更复杂场景的解决方案

为了让父级从其子级获取数据,您需要将回调函数作为属性传递给该子级

callbackFunction(data) {
    // do something
}

<ChildComponent parentCallback={this.callbackFunction} />
有关更多详细信息,请参阅以下文章:


另一种选择是使用Redux之类的状态容器。在这种情况下,您的子组件将把值分派到一个状态,并且该状态正被其父组件监听,当状态更改时,父组件将重新呈现。这是一个针对更复杂场景的解决方案

太好了。也请考虑不要使用<代码>状态>代码>,将该实现移到<代码> StestMaMaGe<代码> > <代码> ReDux。对于Rouver V4,这是一个首选的方式,只需要使用渲染而不是组件来避免额外的安装和重新渲染。也请考虑不要使用<代码>状态>代码>,将该实现移到<代码> StestMaMaGe<代码> > <代码> ReDux。对于Rouver V4,这是一个首选的方式,只需要使用渲染而不是组件来避免额外的安装和重新渲染。