使用mobx时修改state可以不用action,为什么教程里强调要使用?

我在使用mobx和react配合时,修改数据直接就是this.props.store.a = 'hello' 这样也是可以工作的,但是教程说推荐使用action来修改,使用action有什么好处吗?像我这样修改一个值要写一个action的话,那更改每一个都要写一个action不是很麻烦?

阅读 3.7k
2 个回答

1.闻所未闻。我不知道你有没有用过react,你直接修改一个组件里的state,this.state.name = 'a',也是可以的,但是你这样做过吗?肯定是不行的,因为你这样就算改了state,也不会触发react的重新渲染,反而会导致数据和视图不一致。所以react提供里setState这个api用来改变state,这样可以重新触发react的渲染周期
2.mobx和redux以及state一样,都是储存数据的对象而已。但是mobx和redux是全局的,说到底也只是个对象,你这么改它当然能改,但只是改了而已,并没有触发mobx和redux的一些动作。所以从这个意义上来说,action就像是setState,是改变这个状态树的方式,通过调用action触发reducer,从而改变数据树。这个可以保证mobx或redux正常工作,且数据和视图保持一致。
3.不是修改一个值写一个action,而是一个action对应一件事。不同的事对应不同的action,触发对应的reducer,这样可以让mobx或redux知道,是什么动作导致了什么结果。

里面内置的transaction可以避免多个observable的修改导致不必要的多次渲染

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏