来自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实例可以通过上下文向下传递给组件树)或间接分配。
使商店运作的理由是什么,而不仅仅是持有?有什么好处吗?
答案 0 :(得分:0)
Afaik因为在创建商店时在redux中需要减速器。
商店通常使用createStore(reducer, [preloadedState], [enhancer])
创建。
您的问题中提到的功能是在使用商店时有用的实用功能。