请求后更新其他切片

Update other slice after request

使用 RTK Query,如何使用获取功能更新另一个切片的状态?

基本上我试图让所有相关状态彼此相邻,因此在使用 useLazyGetQuery 查询数据后,我想使用结果并将其存储在现有的切片状态中.

虽然像下面这样的东西可以从一个组件中运行,但它会使整个代码变得混乱

  const [trigger, result, lastArg] = useLazyGetFiltersQuery();

  React.useEffect(() => {
    if (result.status === 'fulfilled' && result.isSuccess === true && result.isLoading === false) {
      dispatch(updateData(result.data.map((pg) => ({ label: pg, value: pg }))));
    }
  }, [dispatch, result, result.isLoading, result.isSuccess, result.status]);

我宁愿直接在 createApi 方法中设置一些逻辑,以便结果数据从头开始存储在我想要的切片中。

谢谢

一般来说,我建议不要从 RTK-Query 中复制数据,除非你有充分的理由:你将不得不手写很多东西,这几乎违背了 RTK-Query 的目的,你会输诸如未使用的缓存条目的自动缓存收集之类的东西 - 从那时起你必须自己做。
此外,该数据已经在 Redux 中。通常,在可以避免的情况下,您不应在商店中复制数据。

也就是说,你当然可以做到。比如显示在the "Using extraReducers" authentication example:

const slice = createSlice({
  name: 'auth',
  initialState: { user: null, token: null } as AuthState,
  reducers: {},
  extraReducers: (builder) => {
    builder.addMatcher(
      api.endpoints.login.matchFulfilled,
      (state, { payload }) => {
        state.token = payload.token
        state.user = payload.user
      }
    )
  },
})

请记住:这是 Redux,一切都通过动作发生。您将永远不必 useEffect 将其写回状态。只听你的减速器中的正确动作。