为什么存储不仅仅是一个不可变的数据类型而没有在flux / redux中的逻辑?

时间:2016-12-29 20:22:09

标签: reactjs redux flux

来自redux doc([http://redux.js.org/docs/api/Store.html][1]):

  

商店不是一个类。它只是一个有一些方法的对象。

,方法是:

  
      
  • getState()
  •   
  • dispatch(action)
  •   
  • 订阅(受听者)
  •   
  • replaceReducer(nextReducer)
  •   

(在变化中,它是相似的,区别在于还有一个ActionDispatcher(可能还有一个EventEmitter),但是Store(s)被注册到ActionDispatcher,因此它们是耦合的。)

问题是为什么?为什么存储不仅仅是没有逻辑的解耦数据类型,最好是不可变的数据类型。

以下伪代码是一个示例,用于说明我想说的内容。我用了#34; appState"而不是" store",因为这对我来说更自然:

const initialAppState = require("./initial-app-state.json");

function main() {
  var actionDispatcher = new ActionDispatcher();
  var appState;
  actionDispatcher.register(function onAction(action) {
     var newAppState = appState = reducers_combined(appState: ?AppState, action); //apply the action to appState, and create a new app state; as state is immutable
     var newAppProps = createAppProps(newAppState); //we can write the createAppProps function, which takes an app state and create all the props to be passed down to the root component
     ReactDom.render(React.createElement(App, newAppProps), document.getElementById("root"));
  });
  actionDispatcher.dispatch({
     type: "LOAD_APP_REQUESTED",
     appState: recordify(initialAppState); //we can write the recordify function that turns initialAppState JSONValue to an Immutable Record
  })
}

如上所述,我们可以在main函数中创建ActionDispatcher单个实例,并向它注册一个onAction回调,它可以通过闭包访问当前的app状态,然后创建新的app状态,更新当前的app状态引用新创建的一个,创建关于新应用程序状态的新app道具并呈现它。视图将直接将动作分派给actionDispatcher(actionDispatcher实例可以通过上下文向下传递给组件树)或间接分配。

使商店运作的理由是什么,而不仅仅是持有?有什么好处吗?

1 个答案:

答案 0 :(得分:0)

Afaik因为在创建商店时在redux中需要减速器。

商店通常使用createStore(reducer, [preloadedState], [enhancer])创建。

您的问题中提到的功能是在使用商店时有用的实用功能。