实现createStore方法
思路
1. 定义createStore函数,参数为reducer【函数】和preoldState【初始状态】
2. createStore函数返回一个仓库store【对象形式】
3. store对象中有三个方法
(1) getState方法:获取当前状态,默认值为初始状态
(2) subscribe方法:进行监听,参数为一个监听函数listener
a. 先进行订阅:createStore函数中声明一个空数组,然后将这个监听函数添加进去
b. 然后取消订阅:subscribe方法返回一个函数,找到这个监听函数的索引,然后从索引处删除此函数
(3) dispatch方法:派发action,参数为action
a. 先调用reducer函数生成新的state
b. 然后通知挨个订阅函数执行
代码
function createStore(reducer, preoldState) {
let state = preoldState
let listeners = []
// 获取store中的state
function getState() {
return state
}
// 监听subscribe
function subscribe(listener) {
// 进行订阅
listeners.push(listener)
return () => {
let index = listeners.indexOf(listener)
// 取消订阅
listeners.splice(index, 1)
}
}
// 派发action
function dispatch(action) {
// 更新state
state = reducer(state, action)
// 挨个通知监听函数
listeners.forEach(item => item())
}
const store = {
getState,
subscribe,
dispatch
}
return store
}