自定义 hook 简单实现 React 状态管理

React自定义hook实现状态管理
本文介绍了如何在React中不依赖第三方库,通过自定义hook和发布-订阅模型实现组件状态同步,特别是针对动态主题切换的场景。文章分析了状态同步的需求,详细阐述了解决方案的实现步骤,包括自定义hook、订阅和发布、取消订阅,以及优化策略,如使用Reducer减少不必要的状态更新。最后,鼓励读者深入学习React Context等其他状态管理方案。

背景

在我们开发前端需求时,会遇到多个组件内部状态同步的问题,这些组件往往在 DOM 结构上相距甚远。以网页中常见的“换肤功能”为例,ThemeSwitch 组件在更改内部主题色状态 color 时,希望实时更新其他组件的主题色,实现动态主题切换实时预览功能:

为了实现类似的功能,大家可能会使用 Redux 之类的状态管理库。但是有两个问题值得我们思考:

1.我只是想同步个状态,能简单实现不引入第三方类库么?
2.状态管理类库内部是如何实现的,原理是什么?

问题分析

分析问题的思路有很多,大致可以分为两种:

  • 0 - 1 :先把代码跑起来,一步步遇到问题,解决问题;适合解题路径较清晰问题;
  • 1 - 0 :从结果出发,分析要想达到该结果的前置条件,追本溯源;适合拆解复杂问题;

这里我们采用 1 - 0 的方法来分析:

1. 通知同步

要想达到状态同步,当主题切换组件 ThemeSwitch 改变内部主题状态,执行 setColor(newColor)时,我们只要 通知 其他组件执行同样 setColor(newColor) 操作更新自己的状态就行,这样就达到了状态同步目的:

2. 如何通知?

通知其实就是执行各个组件内部的 setColor 方法,这里就需要将 setColor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值