【问题标题】:Remounting all react child components after root state change根状态更改后重新安装所有反应子组件
【发布时间】:2016-09-26 07:47:27
【问题描述】:

我正在构建一个非常大的应用程序,并希望了解基于根组件状态更改重新呈现应用程序的最佳方法。

示例架构

<Route path="/" component={App}>
 <Route component={Layout}>
  <IndexRoute component={Page} />
  <Route path={page} component={Page}></Route>
  ...
 </Route>
 <Route component={Layout}>
  <IndexRoute component={Page} />
  <Route path={page} component={Page}></Route>
  ...
  </Route>

在我成功登录后的架构中,我将用户数据存储在我的 App 组件中。每个用户都有一个客户端密钥,该密钥用作要显示哪些客户端数据库/数据的标识符。我想要完成的行为是在客户端更改后使用新的客户端数据更新我的当前页面。

现在我可以将我的数据作为 App 组件中的 props 传递给我的组件,但我认为这会因为两个原因而效率低下。

  1. 在渲染我的 App 组件之前,我必须获取所有路线的数据。
  2. 在我重新渲染我的应用组件之前,我的数据会变得“陈旧”。

由于这些原因,我决定让每个页面使用componentWillMount 生命周期挂钩获取它自己的数据,并将数据作为道具传递给页面子组件。这对我有用,因为我能够在导航时为每个页面获取新数据。

我目前遇到的是,在客户端更改后,我的应用程序重新呈现,但由于我当前的页面已经挂载,它不会获取新的客户端数据。但是,如果我离开当前页面然后返回页面,一切都会按预期工作。

我想到的一个解决方案是将用户数据传递到每个页面并使用componentWillReceiveProps 生命周期挂钩并执行比较检查以获取新数据。如果可能的话,我想防止这种情况发生,因为我的应用程序将有 40 多页。

任何建议将不胜感激。

【问题讨论】:

    标签: reactjs react-router


    【解决方案1】:

    你提到的那些

    将用户数据传递到每个页面并使用 componentWillReceiveProps生命周期钩子并进行比较 检查以获取新数据。

    完全没问题。在野外这种模式的例子很少:

    【讨论】:

    • 我知道这种模式有效,但除了必须将componentWillReceiveProps 生命周期挂钩添加到每个页面之外,我还必须手动将 App 组件状态映射到页面布局和页面。这将要求我使用类似{React.cloneElement(this.props.children, {user: this.state.user})} 的东西。在我看来,这开始影响可维护性,也可能意味着可能有更好的做事方式。如this comment所述
    猜你喜欢
    • 2021-07-07
    • 2017-05-05
    • 2021-06-20
    • 2017-03-24
    • 2022-07-08
    • 2021-03-31
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多