Vue 所有请求都应该放在 Vuex 里面吗?

2021-08-25 10:30:22 +08:00
 sxox
最近在定一些代码开发规范,有一个前端同学坚持要把所有请求按模块都放到 Vuex 里面?请问合理吗?
9030 次点击
所在节点    Vue.js
90 条回复
yamedie
2021-08-25 10:56:02 +08:00
我现在就是这样用的, actions 里面基本全是各种 api 调用, 有些回参需要缓存的, 在 action 里调用 commit 把字典接口的回参缓存到 state, 下次调 action 时发现 getters 里有这个字典的缓存, 就直接将它 return 出来, 很顺滑而且自然. (当然如果是列表之类一次性的请求, 直接将 promise 返出去就可以了
KouShuiYu
2021-08-25 11:02:14 +08:00
learnshare
2021-08-25 11:04:36 +08:00
@murmur 并不是能做,我们就要做。

项目简单的话,放一起不觉得乱。
但项目规模大,合作人员多的话,还是要追求模块分层清晰,代码逻辑简单。

我前边说 vue-element-admin:
>类似的项目通常缺乏最佳实践,配套工具和代码风格不太好,导致项目质量不高。
还被骂乱配、乱踩来着,神都吹上了
darknoll
2021-08-25 11:05:03 +08:00
你是不是看了 vue-element-admin, 他放归他放,你自己随便
learnshare
2021-08-25 11:05:34 +08:00
@learnshare 乱配 -> 乱喷
murmur
2021-08-25 11:06:43 +08:00
@learnshare 你觉得为了所谓的清晰把 2 行代码封装成 1 个函数属于最佳实践么

现在基本上都是拦截器统一处理异常,也就是说 api 封装是没有 catch 部分的

那这个 2 变 1 的封装有何意义
yamedie
2021-08-25 11:07:35 +08:00
@murmur 我完全同意#16 楼的观点, 这样做能减少各种弯弯绕(比如甚至单独定义一个 MutationTypes.js)带来的心智负担. 肯定有人会说大型项目不能这么做, 我还真没有经手过什么大型项目... Vuex 按模块拆分并开启命名空间, 每个模块负责一个"实体"(例如订单 /联系人 /对话 /合同都是实体), 每个 action 对应一个后端接口, 每个 action 是名字尽量语义化 /自注释, vue 组件里用 mapActions 引入... 至少给我带来的开发体验是很不错的
cs419
2021-08-25 11:07:41 +08:00
工业化讲究: 够用就好
结合实际情况再加两条: 领导要求的 避免负面作用

够用: 即保障基本需求
领导要求: 领导觉着加了某个东西风水好,虽然可能没啥用,但领导不高兴肯定影响工作
负面: 某个东西不能提供生产 反而导致老出问题 肯定也不行
sjzjams
2021-08-25 11:08:44 +08:00
那你所有的状态管理后面需要维护的就很多
learnshare
2021-08-25 11:21:18 +08:00
@murmur 不是几行代码的问题,是为了保证模块专注在一件事上

项目越复杂,参与人员越多,就更需要
>模块分层清晰,代码逻辑简单。
xu2060
2021-08-25 11:23:52 +08:00
我们这就是这样做的把所有的请求都放在 vuex actions 里面 然后数据都存在 state 里面,虽然整齐,但是这么用肯定不对
PerFectTime
2021-08-25 11:23:57 +08:00
element-admin 似乎就是把 api 放在状态里面的
thtznet
2021-08-25 11:25:39 +08:00
所以,讨论到最后发现都是设计模式问题,那么干嘛用 VUE ? NG 就很香了对么?
violetlai
2021-08-25 11:28:10 +08:00
感觉不太合适吧 毕竟 vuex 就不是处理请求的东西 偶尔需要用共享数据才用它 请求还是同一拦截处理比较好

其次 vuex 是用的真的很难受
wht0522
2021-08-25 12:03:58 +08:00
第一次见到这种方式属实惊呆了 所有接口都放到 vuex 很不方便 element-admin 只是退出 登录 获取用户信息 这几个接口放在这里边
SSSensational
2021-08-25 12:16:01 +08:00
为什么不试试 swrv,以及 vue 下的 umi-hooks/useRequset 。这些只是取数的场景不需要用 store 的。
SZP1206
2021-08-25 12:20:28 +08:00
不合理
Geo200
2021-08-25 13:17:11 +08:00
这明显是把 MVVM 当 MVC 来用了
Lemeng
2021-08-25 13:18:47 +08:00
一般都有规范要求,不然怎么方便怎么来呗
cansiny0320
2021-08-25 13:22:39 +08:00
我觉得可以,全放在 action 里

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/797854

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX