用React Hooks简单代替Redux
内容意在实现小型项目不使用redux下的统一store管理
简要分析
对比一下两者的异同点。
redux
数据流图示:

流程简单的解释为:
- 视图(页面)触发状态更新动作(dispatch)
- Store 将当前状态数据和触发修改逻辑发送到 Reducer
- Reducer 按照预先设计好的逻辑匹配 action 更新状态,返回新的状态
- 最后 Store 保存最新状态,所有订阅者触发更新
react hooks
基本逻辑和 redux 相同,没有了 redux,就得自行需要替代方案。我们知道Context提供了一个无需为每层组件手动添加 props,就能在组件树间进行数据传递的方法。所以充分利用这一点,做一个简单的逻辑分析:

通过 Context 传递数据,假如能引入一个修改动作,就可以完成简单的全局状态管理了。
在这里使用了两个 React 内置 hooks api
- useContext
- useReducer
useContext提供了获取数据(状态)的能力,简单的说就是让父子组件传值从 props 变成直接取值。可以参考React 官方 ?- useContext学习。
useReducer提供了更新数据(状态)的能力。参考React 官方 ?- useReducer学习。
将每个 Context 数据定义为state和dispatch组合,在子组件中通过useContext得到 Context 并使用该 Context 保存的state,通过dispatch修改状态。
这样就有了一个简单的数据流向:

实现
react-env中,已经添加好了相关内容。
写在文末
本文非原创,在学习过程中参考大佬文章后自行总结。
相关参考:
![[微笑]](/face/0.gif)
![[嘻嘻]](/face/1.gif)
![[哈哈]](/face/2.gif)
![[可爱]](/face/3.gif)
![[可怜]](/face/4.gif)
![[挖鼻]](/face/5.gif)
![[吃惊]](/face/6.gif)
![[害羞]](/face/7.gif)
![[挤眼]](/face/8.gif)
![[闭嘴]](/face/9.gif)
![[鄙视]](/face/10.gif)
![[爱你]](/face/11.gif)
![[泪]](/face/12.gif)
![[偷笑]](/face/13.gif)
![[亲亲]](/face/14.gif)
![[生病]](/face/15.gif)
![[太开心]](/face/16.gif)
![[白眼]](/face/17.gif)
![[右哼哼]](/face/18.gif)
![[左哼哼]](/face/19.gif)
![[嘘]](/face/20.gif)
![[衰]](/face/21.gif)
![[委屈]](/face/22.gif)
![[吐]](/face/23.gif)
![[哈欠]](/face/24.gif)
![[抱抱]](/face/25.gif)
![[怒]](/face/26.gif)
![[疑问]](/face/27.gif)
![[馋嘴]](/face/28.gif)
![[拜拜]](/face/29.gif)
![[思考]](/face/30.gif)
![[汗]](/face/31.gif)
![[困]](/face/32.gif)
![[睡]](/face/33.gif)
![[钱]](/face/34.gif)
![[失望]](/face/35.gif)
![[酷]](/face/36.gif)
![[色]](/face/37.gif)
![[哼]](/face/38.gif)
![[鼓掌]](/face/39.gif)
![[晕]](/face/40.gif)
![[悲伤]](/face/41.gif)
![[抓狂]](/face/42.gif)
![[黑线]](/face/43.gif)
![[阴险]](/face/44.gif)
![[怒骂]](/face/45.gif)
![[互粉]](/face/46.gif)
![[心]](/face/47.gif)
![[伤心]](/face/48.gif)
![[猪头]](/face/49.gif)
![[熊猫]](/face/50.gif)
![[兔子]](/face/51.gif)
![[ok]](/face/52.gif)
![[耶]](/face/53.gif)
![[good]](/face/54.gif)
![[NO]](/face/55.gif)
![[赞]](/face/56.gif)
![[来]](/face/57.gif)
![[弱]](/face/58.gif)
![[草泥马]](/face/59.gif)
![[神马]](/face/60.gif)
![[囧]](/face/61.gif)
![[浮云]](/face/62.gif)
![[给力]](/face/63.gif)
![[围观]](/face/64.gif)
![[威武]](/face/65.gif)
![[奥特曼]](/face/66.gif)
![[礼物]](/face/67.gif)
![[钟]](/face/68.gif)
![[话筒]](/face/69.gif)
![[蜡烛]](/face/70.gif)
![[蛋糕]](/face/71.gif)