是否可以在React中访问子组件的状态?

时间:2018-03-03 19:05:47

标签: reactjs redux

我正在一个项目中使用react(和redux)用Web应用程序替换大型Silverlight应用程序。用户可以在其间跳转的多个选项卡和子选项卡。

我们正在使用redux来保存tab / subtab-state。当前解决方案使用cloneElement注入先前的状态和所有组件需要调用的函数(onSaveState)以保存状态。

有没有办法避免在标签+子标签上的所有页面中保存/加载样板代码,例如通过获取子组件的状态?

一个丑陋的解决方案是保存整个组件(包括状态),但这会带来很多开销+使用反应虚拟DOM处理实际上未呈现的内容可能会导致其他一些问题。

注意:我们不允许更改整体用户体验。

更新:我们要完成的是当用户在打开的标签页之间跳转时,尽可能简单地保存和加载状态。用户可以打开几个相同类型的选项卡。大多数选项卡都具有撤消功能。它是一个拥有150多个视图的大型应用程序(不包括所有较小的对话框)。为了使redux存储中的状态保存/加载尽可能无缝,最好只检查一个组件的状态(readonly)以保存它。我们今天有一个很好的解决方案,因为我提到了将previousState作为prop的地方,我们在componentWillUnmount上使用当前状态调用onSaveState。我不需要解释redux如何工作,我只是感兴趣,如果能够以一种方式从外部(例如从父组件)检查组件的状态不要hacky?

1 个答案:

答案 0 :(得分:0)

如果您有复杂的保存/加载代码,请不要将其全部放在父组件中并将其注入子组件中。将其移动到孩子们可以自己消费的共享文件中。

将加载代码放入 reducer 文件中。将保存代码放在操作文件中。然后让标签组件每个require新文件,以便他们可以connect到减速器并dispatch操作。

有关详细示例,请参阅Redux Basics