在 redux 中覆盖整个状态

Overwrite entire state in redux

这是关于 redux 的另一个新手问题。在我的应用程序中,我希望能够从文本文件加载状态,即能够完全重新初始化 whole 状态对象。所以我不想重置 state 到一个初始值,而是用一个新值替换它。 (仅供参考,应用程序仅在浏览器的 localStorage 中存储数据。另外,到目前为止,我已经按照 http://redux.js.org/docs/introduction/index.html 中的精彩教程进行操作)我尝试了几种方法,但是 none 他们已经取得了成果。例如,在我的 reducers/index.js 中,我有:

export default function App (state = {}, action) {
  return {
    todos: todos(state.todos, action),
    ...
    global: global(state, action)
  }
}

reducers/global.js我有:

const global = (state = {}, action) => {
  switch(action.type) {
    case 'LOAD_DB_FROM_FILE':
      return action.fileContents;
    default:
      return state
  }
}

发生的事情是 state 对象,很奇怪(或者不是:))得到一个名为 global 的新字段,其中包含原始状态(而不是从文件中读取的状态) ) 它甚至嵌套了几个级别(所以我在 state.global.global. 有一个 state 的副本)

我知道这种方法的 hackiness,甚至愿意接受我的设置中的一个基本缺陷(由于我的无知),但我仍然无法为我的问题找到一个简单而明确的答案。

一如既往,我们将不胜感激。

我对 redux 知之甚少,但根据我对 JavaScript 的了解,我会说你需要这样的东西:

// reducers/index.js

export default function App (state = {}, action) {
  state = global(state, action);
  return {
    todos: todos(state.todos, action),
    ...
  };
}

所以名为global的reducer有机会一次替换整个状态对象。