Store

Store 是将 Action 和 Reducer 联系到一起的对象。Store 能够维持应用的 State,并且能够提供getState()来获取 State,提供dispatch(action)来更新 State,通过subscribe(listener)及其返回的函数注册和注销监听器。每个 Redux 应用有且只有一个 Store,当需要拆分数据逻辑时,应该使用 Reducer 组合而不是创建多个 Store。

Store 可以通过之前combineReducers()返回的主 Reducer 创建,这是通过 Redux 提供的createStore()来完成的。所以基于之前的示例创建一个 Store 就是通过以下代码。

import { createStore } from 'redux';
import { contentApp } from './reducers';

let store = createStore(contentApp);

createStore()还可以接受第二个参数,其内容为 State 的初始状态。

定义好的 Store 可以使用以下方式发起 Action。

store.dispatch(addContent('some content'));

store.subscribe()可以在 Store 上注册一个监听器,每当 Dispatch Action 的时候就会执行,在监听器函数中可以使用store.getState()来获取当前的 State。

let unsubscribe = store.subscribe(() => {
  let currentValue = store.getState();
});

// 注销监听器
unsubscribe();

在监听器中可以进行 Dispatch 操作,但是需要注意这样的操作会导致 Store 进入无限循环。并且store.subscribe()是一个低层级 API,在一般情况下并不建议直接使用。

Tip

建议可以结合 RxJS 将 State 的变化转换为一个 Observable 进行监听。