mobx-state-tree 使用感受

当React项目组织复杂状态时,我们总需要引入一些状态管理库。Mobx是一个很好的状态管理工具,它巧妙的封装让状态的更新变得更加顺滑。但似乎在更复杂的状态管理中,只使用Mobx还不够得劲。

Mobx-state-tree是一个基于Mobx的状态树管理工具。在国内,据观察,资料比较少,用户数量应该不大。

MST的思想是将状态组件化,复杂状态由更简单的子状态组件组成,也就是Tree的含义。此外,MST的状态组件声明是函数式的,很有意思。第一眼看到MST这个库的时候,觉得这似乎就是完美的状态管理方案了,然而实际应用了一下发现还是有些问题。

这问题不是说MST本身设计的不好or不够易用,而是实际项目往往不存在这么理想的环境。

一是对复杂类型尤其是后端返回数据的定义比较繁琐,有时候不得不使用types.forzen来屏蔽类型细节。二是异步的action需要使用generator的形式+helper function来写,感觉有一些不自然(可能是个人喜好问题)。此外就是这个一长串的函数式的定义看起来有点不爽,有种又臭又长的感觉,在TypeScript下更为明显,对Store的类型定义有种重复工作的感觉,而且也失去了mobx的灵活易用。

我对MST的牢骚主要还是在定义部分,使用上还是没有什么奇怪的,直接从store上取值用就完事。那MST的优点呢,我看还是在这个模块化的结构上,可以帮忙节省一些维护多Store嵌套的复杂情况的精力。至于这个额外引入的概念和boilerplate code值不值得呢,那就大家各有想法了,说到底还是trade off,根据项目实际情况来吧。个人感觉带来的好处不是很大,可能这也是MST目前不温不火的原因吧。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注