« 回到主页

Redux 核心概念

1 Immutable State

Redux没有规定用什么方式来保存State,可能是Javascript对象,或是Immutable.js的数据结构。但是有一点,最好确保State中每个节点都是Immutable的,这样将确保在判断数据是否变化时,只要简单地进行引用比较即可,从而避免 Deep Equal 的遍历过程。 为了确保这一点,在reducer中更新State成员,需要遵循以下的方式,遵循这样的方式,无需Immutable.js也可以让State是Immutable的。 是:

score = {…score, {computer: 95}};

而不是:

score.computer = 95;

是:

students = […students, {name: ‘Alice’}];

而不是:

students.push({name: ‘Alice’});

2 reducer

function createReducer(initialState, handlers) {
    return function reducer(state = initialState, action) {
        if (handlers.hasOwnProperty(action.type)) {
            return handlers[action.type](state, action);
        } else {
            return state;
        }
    }
}
const todosreducer = createReducer([], {
    'ADD_TODO': addTodo,
    'TOGGLE_TODO': toggleTodo
});
var reducers = reduceReducers(
    combineReducers({
        reducer1,
        reducer2,
        ...
    }),
    (state, action) => {
        switch (action.type) {
            case '***’:
                const state1 = state.reducer1;
                const state2 = state.reducer2;
                ...
        }
    }
);

注意,由于reduce-reducers组合(每个参数就是一个reducer)的每一个reducer都可以获取整个State,所以请不要滥用,在大部分情况下,如果严格遵循数据范式,通过计算的方法获得跨越reducers的状态是推荐的方法。

3 action

在Redux中,改变State只能通过action。并且,每一个action都必须是Javascript Plain Object。 事实上,创建action对象很少用每次直接声明对象的方式,更多地是通过一个创建函数。这个函数被称为Action Creator。 Action Creator看起来很简单,但如果结合上Middleware就可以变得非常灵活。

4 Higher-Order Store

有些时候需要对整个Store对象都进行扩充,这就引入了Higher-Order Store的概念。 Higher-Order Store提供一个函数,接受Store对象作为输入参数,产生一个新的Store对象作为返回值。 Redux建议在middleware不能满足扩展要求的前提下再使用Higher-Order Store。

5 Binding To React (React-Native)

6 总结

« 回到主页