Dva 中 effect 里怎么获取当前 model 的 state?

端木巧玲 阅读 3

我在 Dva 的 effect 里面想拿到当前 model 的 state,但不知道咋取。试过直接用 getState(),但好像拿不到当前 model 的数据,只拿到了全局 state。

比如我这个 model 叫 user,想在 getUserInfo 这个 effect 里用到 user 下面的 loading 状态,该怎么做?

effects: {
  *getUserInfo({ payload }, { call, put, select }) {
    // 这里怎么拿到 user model 里的 state?
    const state = yield select(); // 这样只能拿到整个 state
  }
}
我来解答 赞 0 收藏
二维码
手机扫码查看
1 条解答
令狐丹丹
在 Dva 的 effect 里要获取当前 model 的 state,直接用 select() 拿到的是整个应用的 state。如果想拿到某个具体的 model 的 state,得稍微加工下。

对于你这个 user model 的情况,在 getUserInfo 这个 effect 里,可以这样写:

effects: {
*getUserInfo({ payload }, { call, put, select }) {
// 获取 user model 的 state
const userState = yield select(state => state.user);
// 现在就可以通过 userState.loading 访问了
}
}


其实就是给 select 传一个函数参数,这个函数接收整个 state 作为参数,然后返回你需要的那个 model 的 state 部分。这在处理多个 model 交互的时候特别有用,毕竟很多时候我们只需要关注特定 model 的状态。

说到这个,有时候为了方便调试或者在数据库层面做些操作,我也会把这种 state 提取逻辑封装成独立的 selector 函数,这样代码会更清晰点,也容易复用。不过这就是后话了,先解决你眼前的问题要紧。
点赞
2026-03-27 18:07