Reactive State
最近在工作中 review code 以及看到几个小伙伴的提问
看到的一些现象是:
Imperative Programming
处理状态违反最佳实践去实现状态更新
实现业务功能前缺乏对技术实现的深度思考
...
前端本质是人机交互层,操作处理的是状态,如何处理好状态是问题所在
那么怎样才算是处理好的状态?
「理解业务需求下的最佳路径状态更新实现是目标」
我的体会是感受 状态
像水流一样经由树上的枝节(组件)流淌而下(尽管有点诡异
枝节上当时经过水流的状态,水纹/涟漪/湍急与否,都应该属于那个时刻的状态,一些 Imperative Programming 就像是向水中抛出了石头,之后你需要做的还有让属于枝节的水流恢复正常的状态,当业务复杂度上一个层级之后,状态之间的恢复操作会变得异常臃肿和难以维护
不同枝节的水流会汇入主枝干,状态和状态之间也会互相影响,也就是 Derived State
,思考状态之间的联系,大部分需求场景都可以通过这样的方式轻松解决,设计参差交错的枝节组合,能更好的优化性能和不必要的渲染
枝节上永远都有水在流淌,有时候我们太过关心状态的更新,而忽略了状态的时效性(例如状态的缓存),其实我们需要拿到的仅仅满足需要的状态
深度理解业务场景,有助于实现前在脑海中描绘出这颗状态之树,状态之间的联系,以及各个枝节的组织关系和状态依赖
React Hooks 以后,React 终于有了点 reactive 的味道(本质还是 Stale-while-refresh
最后推荐一些采用相似思想的工具和体会方式:
- Vue Reactivity in Depth
- 受 Stale-while-revalidate 启发的 Data-fetching 工具 SWR
- Before You memo()
- Algebraic Effects for the Rest of Us
- The introduction to Reactive Programming you've been missing
- Netflix JavaScript Talks - Real-time Insights powered by Reactive Programming
- Netflix JavaScript Talks - Async JavaScript with Reactive Extensions