我已经以“正常”方式构建了我的第一个带有状态存储的 React 应用程序,现在我正在研究使用像Este starterkit 中使用的不可变全局状态。
- 所有商店的状态都保存在一个单一的不可变数据结构中
- 组件没有状态,但基于 store getter 函数访问其 render() 中的数据
- 商店也是无状态的,但使用游标改变其域的全局应用程序状态。
- 顶级应用程序组件侦听状态更改,并重新渲染整个组件树。
- 组件被实现为“纯”,这意味着它们使用 shouldComponentUpdate 来有效地确定它们可以在重新渲染中被跳过。
它以几种方式简化了应用程序结构:
- 组件不监听存储,也不将存储数据复制到它们的本地状态。他们只是在每次渲染时获取他们的商店状态。
- 全局状态始终是整个应用程序的快照,这使得调试和添加诸如撤消琐碎之类的功能变得更加容易。
- 全局状态似乎简化了同构渲染。
我只阅读了关于在 React 中使用不可变数据的积极方面,并且建议避免组件中的状态,所以我想知道是否有任何缺点。我想一定有,因为否则我不明白为什么它不推荐的方式来结构作出react的应用程序。
不变性对我来说是新的,所以如果我开始在复杂的现实世界应用程序中使用这种方法,有什么我应该注意的警告吗?
我能想到的唯一小事是在 Este 使用 forceUpdate() 时使用它,因为我已经读到它是一个同步函数。例如,Morearty 似乎将更新推迟到下一个动画帧以对它们进行批处理,但我认为这是一个实现细节/优化,而不是不可变单状态方法的某些继承缺点。