redux的好处,以及几个源码解析

一、为什么要使用redux,而不用state?

redux主要用于状态管理
使用Redux的主要优势之一是它可以帮你处理应用的共享状态。如果两个组件同时需要访问同一状态的现象称为“共享状态”。你可以将该状态提升到附近的父组件,但是如果该父组件在组件树中向上好几个组件的位置,那么将状态当做属性向下一个一个地传递,这项工作很快就会变得乏味。此外,在该父组件和该子组件之间的组件甚至根本不需要访问该状态!在构建网络应用时,Redux不仅使我们能够以有条理的方式存储数据,而且使我们能够在应用的任何位置快速获取该数据。只需告诉Redux到底哪个组件需要哪个数据,它就会为你处理后续一切工作!借助Redux,你可以控制状态改变的时间、原因和方式。

redux的三大优势:
1、单一数据源
Redux的基本原则之一是存在单一数据源:Store。也就是说,Store包括应用的全局状态,全存储在一个对象树中。只有单个状态树,对于应用的很多方面都有好处。假设在构建应用时尝试实现撤消/重做功能。如果所有状态都存储在一个树(单一数据源)中,则实现起来比数据分散在多个组件中简单多了。状态集中到一个位置后,调试和检测过程也会简单很多!为了保持这种单一数据源特性,Redux制定了几条规则,确保一切尽在掌控。如下:

2、状态是只读的
Redux应用中的状态是只读的,即Redux状态不可变。例如,React组件不能直接写入Redux状态,而是发出intent来更新状态。实际上,只有叫做reducer的纯函数能够更改状态
这样设计的好处是:增强了可预测性和可靠性避免产生副作用(下个部分将详细介绍!)阻止外部文件修改state。所有对state的改动都被集中于一个地方,并且被严格地依次触发更改state的唯一方式是派发相应的action,以描述所需的更改。暂时不用担心这些概念;我们将在下个部分详细讲解!

3、状态的改变只能通过纯函数操作
纯函数是函数式编程的核心概念。除了避免数据突变和副作用之外,纯函数还与组件的概念非常契合。首先,纯函数本质上就是模块化的,这使它更容易被测试。由于当参数相同时,纯函数总是产⽣相同的结果,你不必担⼼应用其他部分的数据受到影响。在调试期间,这将给予明确定义的额外控制点。此外,纯函数使代码更好维护。纯函数不会产生副作用。这意味着你在重构应用时,纯函数不会对其外部内容产生任何不利影响。尽管使⽤纯函数会为你的应⽤带来诸多好处,你仍然可以选择将纯函数与非纯函数一起使用。使用非纯函数并不一定意味着“糟糕的编程方式”。例如,使用事件处理程序更新 DOM 的按钮就不适合使用纯函数,因为事件处理程序会更新 DOM(即产生副作用!)。使用纯函数可以帮助你提高代码质量,在构建应用时记住这一点将使你成为更优秀的程序员。

参考资料:https://www.jianshu.com/p/d6614feef303

二、redux源码解析

1、关于createStore,combineReducer,compose等
https://segmentfault.com/a/1190000011468226
https://www.cnblogs.com/cloud-/p/7277008.html
https://www.cnblogs.com/shapeY/p/10728585.html
PS:当createStore(reducer,preloadedState)中的reducer函数是combineReducers合并成的,传入初始状态时,要注意state的keys要和reducers一致。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值