【问题标题】:What is the initialState used for in Redux createStore functionRedux createStore 函数中使用的 initialState 是什么
【发布时间】:2016-06-25 23:31:23
【问题描述】:

全部:

当我阅读 Redux 的源代码时,在它的 createStore 中:

function createStore(reducer, initialState, enhancer) {
    ......
    var currentState = initialState;
    ......
    dispatch({ type: ActionTypes.INIT });
    ......
}

当创建一个新的store时,它会将currentState设置为initialState,并在init dispatch中调用reducer来更新默认的state值。我想知道:一般 currentStatew 都会从 reducer 中获得一个值,那么那个 initialState 的目的是什么

谢谢

【问题讨论】:

  • 现在整个应用程序状态都在一个树中,您可以将该树序列化(到 json)并保存以备后用。然后,您可以使用您保存的状态填充整个应用程序。这里initialState 允许我们注入应用程序的状态。这是以 redux 的方式组织状态的主要特征之一。
  • @DavinTryon 谢谢,我想我没听懂你。比如说当我们向 createStore(reducer, savedState) 注入保存状态时,初始的 dispatch dispatch({ type: ActionTypes.INIT }); 仍然会被调用,返回 reducer 中定义的值,那个 savedState 是如何使用的?

标签: redux


【解决方案1】:

通常,只需将初始状态指定为reducer默认参数,让每个reducer自己管理。

但是在某些情况下,您希望使用现有数据“水合”状态。例如,您可能已将整个状态树保存在 localStorage 中并希望在启动时从那里加载它,或者您可能是 rendering on the server,并希望从 HTML 加载您保存在服务器上的初始状态。

在这种情况下,initialStatecreateStore() 很有用,因为它可以让您有选择地对树的某些部分进行水合,其中您有预先填充的数据。在这种情况下,它将“赢得”reducer 默认状态,这通常是您想要的行为。 initialState 中存在的状态树部分将按原样使用,缺失的部分将从减速器中检索。这使得“恢复”状态的某些部分成为可能,但始终重新初始化其他部分。

希望this answer 能对这项技术提供更深入的解释。

【讨论】:

  • 谢谢,当我再次阅读该代码时,我终于意识到让我感到困惑的是initState需要具有与restoredState相同的结构,否则它将被reducer默认返回覆盖。顺便说一句,我现在正在阅读您关于演示/容器组件的文章。太喜欢了!
  • 嗨,Dan,关于 react-redux 的一个问题是:在那个 todo 列表示例中:当我们构建容器组件时:const mapStateToProps = (state) => { return { todos: getVisibleTodos(state.todos, state.visibilityFilter) } } 状态必须是整个状态树,并且在 getVisibleTodos(或其他什么)我们必须知道状态树的确切结构才能访问待办事项的部分,对吧?不可能像在构建 combine reducer 中那样,只是 state pass 的一部分,对吧?
  • 您在mapStateToProps 中获得完整状态,但如何处理它取决于您。例如,您可以编写我们称为“选择器”的辅助函数来提取状态的一部分,甚至组合它们。我建议您查看一个名为 Reselect 的库,它可以让您创建可组合且高效的选择器。
  • 谢谢,说到容器组件,假设我有一个数据可视化图表,它由许多不同的表示组件组成(如线条、轴、标题、图例、选项小部件、标题菜单、等等),我有点想知道你推荐哪种方式:我应该用容器组件包装它们中的每一个(这似乎增加了很多工作)还是只使用展示组件,然后包装最终组件(最突出的一面)带有 single 容器组件(这似乎需要仔细设计归因传递架构)?
  • 我可能会先用一个容器包装它们,然后看看效果如何。
猜你喜欢
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 2019-02-04
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多