redux addCase不改变状态,也不控制日志

fwzugrvs  于 2023-01-26  发布在  其他
关注(0)|答案(2)|浏览(165)

你好,我有一个非常奇怪的问题。我用CreateAsyncThunk获取数据,并很好地接收它们,但状态没有改变

const initialState = {
  posts: [],
  status: "idle", //idle | loading | success | failed
  error: null,
};

export const fetchPosts = createAsyncThunk("posts/fetchPosts", async () => {
  const response = await axios.get(POSTS_URL);
  return response.data;
});

下面是我的addCase:

extraReducers: (builder) => {
  builder.addCase(fetchPosts.fulfilled, (state, action) => {
    state.status = "success";
    console.log("test")
    state.posts = action.payload;
  });
},

Here is my Redux devtools actionHere is my Redux devtools state
甚至我的addCase中的控制台日志也没有显示
它看起来不属于任何addCase

zmeyuzjn

zmeyuzjn1#

如果addCase函数中的控制台日志没有显示,则可能意味着异步thunk没有分派extraReducers函数正在侦听的操作。
一种可能是根本没有调用异步thunk。请确保在应该使用获取的数据的组件中调用了异步thunk。
另一种可能是调用异步thunk时出错,可以在异步thunk调用周围添加一个try-catch块,以查看它是否抛出错误。

try {
      const response = await fetchPosts();
     // Do something with the response
    } catch (err) {
      console.error(err);
}

此外,确保在定义extraReducers函数的同一存储中使用异步thunk。
最后,可能是您试图更新的状态对象的status和posts属性不存在,或者使用此数据的组件使用了错误的状态对象。请仔细检查初始状态对象,并确保您试图更新的属性存在

yhxst69z

yhxst69z2#

谢谢你的回复@弗拉基米尔,但是我刚刚发现我的错误......
我只是把额外的减速器放在减速器块里。
And it was fixed simply by moving the extraReducers OUTSIDE the reducers block.... Newbie problem :)

相关问题