使用不可变的

Immutable 是一个很棒的库,它为我们提供了广泛使用的集合类型的不可变版本,例如列表,堆栈,地图等。

它简化了对状态的操作,使得更容易进行纯计算并避免突变。

让我们看看如何使用 Immutable 的 Map 和 List 结构重写 Basic reducer:

import { ACTION_ERROR, ACTION_ENTITIES_LOADED, ACTION_ENTITY_CREATED } from './actions';

// Import Immutable
import Immutable from 'immutable';

// Set up a default state using a Map, a structure very similar to objects
// Note that states in Redux can be anything, not just objects
const initialState = Immutable.Map({
    error: undefined,
    entities: Immutable.List()
});

export default (state = initialState, action) => {

    switch(action.type) {

        case ACTION_ERROR:
            return state.set('error', action.error);

        case ACTION_ENTITIES_LOADED:
            return state.merge({
                entities: Immutable.List(action.entities)
                error: undefined
            });
        
        case ACTION_ENTITY_CREATED:
            return state.set('entities', state.entities.push(action.entity));

        default:
            return state;
    }
};

正如你可能已经看到的,使用 Immutable 可以更轻松地处理不可变状态。