0

以下代码按预期工作。使用 createEntityAdapter 填充状态。

import { createSlice, createAsyncThunk, createEntityAdapter } from '@reduxjs/toolkit';

export const fetchUsers = createAsyncThunk('users/fetchUsers', async () => {
  const response = await fetch('https://mysite/wp-json/wp/v2/users');
  return response.json();
});

export const usersAdapter = createEntityAdapter();
const initialState = usersAdapter.getInitialState({ status: 'idle' });

export const usersSlice = createSlice({
  name: 'users',
  initialState,
  reducers: {},
  extraReducers: (builder) => {
    builder.addCase(fetchUsers.pending, (state) => {
      state.status = 'pending';
    });
    builder.addCase(fetchUsers.fulfilled, usersAdapter.upsertMany);
  },
});

export default usersSlice.reducer;

但是,随着承诺的履行,我还想将状态的“状态”属性更新为“空闲”。

当我将已完成的案例更改为:

builder.addCase(fetchUsers.fulfilled, (state, action) => {
      usersAdapter.upsertMany;
      state.status = 'idle';
    });

当我添加一个参数时,upsertMany

builder.addCase(fetchUsers.fulfilled, (state, action) => {
      usersAdapter.upsertMany(action.payload);
      state.status = 'idle';
    });

我收到错误:可能未处理的 Promise Rejection (id: 0)

除了如何使它工作的问题,我可以再问一个问题吗?在第一个代码片段中(那个有效的):

builder.addCase(fetchUsers.fulfilled, usersAdapter.upsertMany);

我知道 addCase 有两个参数:动作类型/创建者(fetchUsers.fulfilled 是这里的动作创建者)和一个减速器(在这种情况下是 usersAdapter.upsertMany)。这里 fetchUsers 返回对象,但是usersAdapter.upsertMany 如何知道要插入/更新什么作为有效负载?那里没有参数(例如usersAdapter.upsertMany(action.payload)。在所有其他需要一些有效负载的reducer中,总是有一个参数(状态,动作),例如。

builder.addCase(incrementBy, (state, action) => state.counter += action.payload)
4

0 回答 0