What's connector
在解答 connector 是什么之前,我们来先看一个代码片段
- let hasChanged = false;
- const nextState = {};
- for (let i = 0; i < finalReducerKeys.length; i++) {
- const key = finalReducerKeys[i];
- const reducer = finalReducers[key];
- const previousStateForKey = state[key];
- const nextStateForKey = reducer(previousStateForKey, action);
- if (typeof nextStateForKey === 'undefined') {
- const errorMessage = getUndefinedStateErrorMessage(key, action);
- throw new Error(errorMessage);
- }
- nextState[key] = nextStateForKey;
- hasChanged = hasChanged || nextStateForKey !== previousStateForKey;
- }
- return hasChanged ? nextState : state;
以上来自于 Reduxjs-combineReducers的核心实现。
combineReducers 是一个将 Reducer 分治的函数,让一个庞大数据的 Reducer 可以由多层的更小的 Reducer 组合而成。
这是 Redux 框架里的核心 API,但是他有缺点。他有非常明显的语言的局限性,如下 3 点:
- 浅拷贝一个任意对象
- const nextState = {};
- 读取字段
- const previousStateForKey = state[key];
- 写入字段
- nextState[key] = nextStateForKey;
将上面的 3 点抽象来看:
- State 的 clone 的能力(浅拷贝)
- Get & Set 的能力,即为 Connector 的概念。有了 以上两点,我们才完全集成了 Redux 的所有精华,同时将它的设计更上一个通用的维度。