在React中使用不可变状态有哪些缺点?
- 文档。SO中一些投票最多的问题/原因与琐事有关,例如更新嵌套列表项,这都是因为文档更加面向熟悉函数式编程的读者,这使得它对其余函数的访问变得不那么容易。
- 将模型层次结构知识与组件分开并不是一件容易的事。我不喜欢
this.state.getIn("[parent, child, index]")在组件中进行操作,因为它增加了更改模型破坏组件代码的可能性。这可以通过可扩展性(在下面进行更多介绍)或通过辅助方法来避免,但是您肯定会失去普通JS成员的简单性。 - 我面临的一个重大挑战是能够对状态进行序列化和反序列化。fromJS方法支持自定义恢复器,但它们是皮塔饼,需要仔细的测试和维护。
- 记录类型严重受制于称为嵌套的崩溃。这很可悲,因为它允许更容易(相对而言)可扩展性,但仅鼓励单级层次结构。您无法轻松地从JSON创建嵌套记录。除非您使用上述的皮塔饼齐发器,否则很难将它们与常规的fromJS不可变用法混合使用。我是否提到了令人遗憾的是,给定Records将模型属性公开为一等成员,确保模型完整性和默认值。
- 然后是可扩展性。尝试在不可变数据模型周围添加辅助对象,以抽象化组件中模型层次结构的依赖性,您将面临明显的障碍。反序列化成为一场痛苦的离婚战。如果唱片混在一起,它们将哭泣,以此类推,那么您就需要弄乱Reviver。一种更容易的扩展机制将大大有助于使我的组件代码更简洁。
- 没有记录的最佳做法。尽管这与#1相符,但我仍要指出,缺乏好的文档会阻止人们选择最佳的做事方式。我不确定是否应该使用更新程序,forEach或setIn(等等)来更新不可变结构。这些方法相互之间的交叉引用不足以让您知道周围有哪些替代方法。