redux实现
面试之redux的实现
为啥使用redux略过…
demo地址
一般项目中使用redux时,会和react-redux配合使用,如果不使用react-redux时,redux也可以单独工作,使用react-redux会简化一些操作
reudx包暴露了几个方法
- createStore
- combineReducer
- applyMiddleware
- bindActionCreators
createStore
其中createStore是其中的核心方法,只使用其中一个就可以单独使用
根据上面的使用流程可以实现以下方法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45function createStore(reducer, prePayload) {
let currentState = prePayload;
let listeners = [];
function getState() {
return currentState;
}
function dispatch(action) {
currentState = reducer(currentState, action);
for(let i = 0; i < listeners.length; i++) {
listeners[i]();
}
}
function subscribe(func) {
let isSubscribed = false;
if (typeof func === 'function') {
if (!listeners.includes(func)) {
listeners.push(func);
isSubscribed = true;
}
}
return function unSubscribe() {
if (!isSubscribed) {
return;
}
let index = listeners.indexOf(func);
listeners.splice(index, 1);
}
}
dispatch({type: 'INIT'});
return {
getState,
dispatch,
subscribe,
}
}
combineReducer
这个函数的意义是可以整合reducer函数,这样可以方便分模块定义redux
实现原理就是定义一个顶级对象,使用key
来区分(key是传入combineReducers
的对象的key),当派发一个action
时,循环所有的reducer
函数,更新所有的模块
1 | export default function combineReducers(reducers) { |