xuchaobei / react-book

《React进阶之路》示例代码
281 stars 143 forks source link

mobx实战中api的处理 #11

Closed IceyIsAlreadyTaken closed 4 years ago

IceyIsAlreadyTaken commented 5 years ago

看了您的mobx实战那一章节,感觉收获很大,现在打算在项目中应用起来,有一个疑问,想要咨询下您的观点 我看store中注入了api的对象,用于在store的action中用api发起请求,对返回数据进行处理存储,现在我也把api注入在了store中,但是我的api中发送请求的方法很多,store只是用到了其中很小一部分,有些api中的请求是在页面通过this.props.store.api.xxx来发起请求,但是这样的话感觉不太合理,一是store中只用了很少一部分api的方法,是否不应该把整个api注入给store,二是页面中为了调用api的方法就必须Injec("store"),这样才能通过this.prop.store.api来调用方法,这也不太合理

我的想法是把api拆开,一部分注入在store中供store的异步action使用,一部分直接在页面中引入,供页面直接发起请求,但是这样又会觉得这一个模块的api被硬生生拆开成两个,而且页面中可以随意引入api,请问我的想法是不是也不太好,或者您有什么想法可以提示给我的吗?多谢您查看我的问题,期待您的回答

xuchaobei commented 5 years ago

我认为你的根本问题在于没有充分利用状态管理层。API请求数据理论上都应该属于状态管理的一部分,所以都应该通过action触发,如果页面组件中还需要自己调用api的话,说明有些状态又交给页面去负责了,这种状态管理设计是不纯粹的。

如果非要在页面中直接调用api,将api在组件中通过一般的import引入的方式使用,比通过store调用,代码逻辑上要更顺畅自然些。

IceyIsAlreadyTaken commented 5 years ago

嗯嗯,多谢您的指导,目前采用的是页面直接import的方式来引入api,页面中自己调用api的地方不涉及状态管理,因为项目本身的原因,有些东西只是需要发送一个请求,至于结果不需要在response中处理,所以就没有通过action的方式再来触发请求了