基于mobx,把react变成存粹的view层,希望大家讨论下这种方式的合理性

#1

通过mobx抽象出一个viewModel层,把react变成存粹的view层。
父子组件不再通过props通信,由于子组件的viewModel在父组件中实例话,父组件天然拥有这个实例,父组件可以直接操作这个viewModel和获取viewModel状态。
子组件要获取上层状态的时候,也可以拿到父组件的实例。
纯粹的数据如用户信息,路由信息等等可以放到store下面,store不关心UI,只关系数据。
这么做主要的一个原因是,很多时候,子组件很多交互和父组件无关。但是又要获取子组件的部分状态来展示。导致得把数据和请求都放到父组件里面处理,然后再把状态用props流下去,而不能单纯作为组件容器,导致顶层组件各位膨胀。仓库地址

1 Like
#2

1、父组件这样的确会导致组件膨胀,我们可以抽离子组件,使用前端数据层集中化管理,(flux,redux,mobx)数据层的store 模块公用性能,没必要都从顶层传入。

#3

现在一个点就是去无关数据的集中化,在现有的很多实践里面,把loading状态什么的都放到了global的store里面,实际上只有组件自己才关心这个状态。如果组件依赖全局状态比如redux store,实际上这个组件是不可插拔也不可被复用的。
同时,代码分割也变得困难,我一个页面只用一部分状态,但是不得不引入一个全局store的,因为很多情况下store是不可分割的。 @ludan1107743896

#4

如果把 redux 的状态切分到更小更可控的范围,并且支持热替换你愿意试用吗

#5

嗯,不用… @akira

#6

你可以组件的按需加载啊,dynamic 你需要那块modles层你加载哪层就行啊,这个肯定会避讳的。

#7

如果你写过交互巨复杂又是独立于业务代码的的业务组件,你就会觉得逻辑内聚的重要性了。redux并不提供这种能力。 @ludan1107743896

#8

哦,你那有什么比较好的解决方式没,说一下。