Rematch中如何正确处理异步action的loading状态?

Top丶珮青 阅读 18

我在用Rematch写一个数据请求的功能,想在请求开始和结束时更新loading状态,但发现状态没反应。我试过在effect里直接dispatch更新loading,但组件没重新渲染。

我的model是这样写的:

{
  state: { data: [], loading: false },
  effects: (dispatch) => ({
    async fetchData(payload, rootState) {
      dispatch.myModel.updateLoading(true);
      const res = await api.getData();
      dispatch.myModel.updateData(res);
      dispatch.myModel.updateLoading(false);
    }
  }),
  reducers: {
    updateLoading: (state, payload) => ({ ...state, loading: payload }),
    updateData: (state, payload) => ({ ...state, data: payload })
  }
}

是不是哪里写错了?为啥loading状态变了但页面没更新?

我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
Zz西西
Zz西西 Lv1
代码本身没毛病,问题在组件层,检查你的connect或useSelector有没有正确订阅这个model的state。如果懒得手动管理loading,直接装@rematch/loading插件,配置后自动给每个effect生成loading状态,省得自己写一堆updateLoading。

import loading from '@rematch/loading'

init({
models: { myModel },
plugins: [loading()]
})

// 组件里直接用
const loading = useSelector(state => state.loading.effects.myModel.fetchData)
点赞 2
2026-02-28 19:06