3 min read

Reactive State

最近在工作中 review code 以及看到几个小伙伴的提问

看到的一些现象是:

  1. Imperative Programming 处理状态

  2. 违反最佳实践去实现状态更新

  3. 实现业务功能前缺乏对技术实现的深度思考

  4. ...

前端本质是人机交互层,操作处理的是状态,如何处理好状态是问题所在

那么怎样才算是处理好的状态?

「理解业务需求下的最佳路径状态更新实现是目标」

我的体会是感受 状态 像水流一样经由树上的枝节(组件)流淌而下(尽管有点诡异

枝节上当时经过水流的状态,水纹/涟漪/湍急与否,都应该属于那个时刻的状态,一些 Imperative Programming 就像是向水中抛出了石头,之后你需要做的还有让属于枝节的水流恢复正常的状态,当业务复杂度上一个层级之后,状态之间的恢复操作会变得异常臃肿和难以维护

不同枝节的水流会汇入主枝干,状态和状态之间也会互相影响,也就是 Derived State,思考状态之间的联系,大部分需求场景都可以通过这样的方式轻松解决,设计参差交错的枝节组合,能更好的优化性能和不必要的渲染

枝节上永远都有水在流淌,有时候我们太过关心状态的更新,而忽略了状态的时效性(例如状态的缓存),其实我们需要拿到的仅仅满足需要的状态

深度理解业务场景,有助于实现前在脑海中描绘出这颗状态之树,状态之间的联系,以及各个枝节的组织关系和状态依赖

React Hooks 以后,React 终于有了点 reactive 的味道(本质还是 Stale-while-refresh

image

最后推荐一些采用相似思想的工具和体会方式:

  1. Vue Reactivity in Depth
  2. 受 Stale-while-revalidate 启发的 Data-fetching 工具 SWR
  3. Before You memo()
  4. Algebraic Effects for the Rest of Us
  5. The introduction to Reactive Programming you've been missing
  6. Netflix JavaScript Talks - Real-time Insights powered by Reactive Programming
  7. Netflix JavaScript Talks - Async JavaScript with Reactive Extensions