redux与观察者模式

一. 前言

面试官:请你谈下redux的设计思想?

我:redux通过createStrore创建store实例,store.dispatch传递action,触发reducer改变数据。

面试官:这个是它的使用方法,我想问下它的设计思想或者用到哪些设计模式。

我:emmm....

先说下redux解决的问题:

redux推崇单一数据源,即一个web应用状态只有一个数据来源。以一种比较清晰的方式去维护应用的状态。这其实也和react的单向数据流吻合。

二. redux中的几个关键概念:

store:

1. store提供数据的get钩子(store.getState),不直接提供数据的set,所以必须通过dispatch(action)来set数据。

2. 利用观察者模式(sub/ pub)连接model和view的中间对象。

view层通过调用store.dispatch方法触发reducer改变model。对应pub。

model层通过调用store.subscribe注册视图更新事件(setstate),该事件会在数据改变之后被调用。对应sub。

reducer

真正改变数据的方法。接受一个旧的state,返回一个新的state。这种改变方式也体现了redux不可变数据的思想。即一个数据产生,就不会变化,如果要改变这个数据,需要返回一个新的数据引用。

三. 以观察者模式的思路实现一个简单的redux

function createStore(reducers) {
    const subList = []; // 注册事件列表
    let  currentState = initState = reducers(init); // 初始化initState
    
    function subscribe(fun) { // sub
        subList.push(fun);
    }

    function dispatch(action) { // pub
        currentState = reducers(initState, action);
        subList.forEach(fn => fn()); // 将事先注册的事件遍历执行。
    }

    function getState() { // state的get钩子,返回目前的state
        return currentState;
    }
    
    const store = { dispatch, suscribe, getState };
    
    return store;
}复制代码


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值