使用 redux store 自定义 RTK-query query / mutation body

Customising RTK-query query / mutation body with redux store

我想在这个 createApi 函数中使用 current redux store data 更改 postBody 变量来进行查询 body。 我的意思是我想从商店中获取一个 redux 节点,如果可能的话,将数据与 postBody 合并。

export const loginIdentityApi = createApi({
  reducerPath: 'loginIdentity',
  baseQuery,
  tagTypes: ['Login'],
  endpoints: (build) => ({
    postLogin: build.mutation<TApiResponse, TPostBody>({
      query: (postBody: TPostBody) => ({
        url: urlPrep(signin, {
          updateCookies: true,
        }),
        method: 'POST',
        body: postBody,
      }),

      transformResponse: (response: TApiResponse) => {
        return response
      },
      invalidatesTags: ['Login'],
    }),
  }),
})

这在设计上是不可能的。

如果这样的事情是可能的,要么你的请求和你的状态 运行 不同步,要么需要一些非常复杂的跟踪逻辑来确定哪个状态变化会触发重新获取.

因此,您可以获得的所有数据都仅通过 arg

在您的组件中获取该数据并将其作为 arg 传递。

const dataFromStore = useSelector(selectMyDataFromStore)
const result = useMyQuery({ body: dataFromStore })

感谢@phry 的回复,

我在 RTK 网站上找到了这个文档;

https://redux-toolkit.js.org/rtk-query/usage/customizing-queries#performing-multiple-requests-with-a-single-query

如果我使用这样的状态怎么样?

export const shippingInfoApi = createApi({
  reducerPath: 'shippingInfo',
  baseQuery,
  tagTypes: ['ShippingInfo'],
  endpoints: (build) => ({
    putShippingInfo: build.mutation<TApiResponse, TPostBody>({
      async queryFn(_arg, { getState }, _extraOptions, fetchWithBQ) {
        const state = getState()
        const shipModeId = state.shippingOptions.queries['getShippingOptions(null)'].data[0].value;
        await fetchWithBQ({
          url: urlPrep(shippingInfo, {
            updateCookies: true,
          }),
          method: 'PUT',
          body: { ..._arg, shipModeId },
        })
      },
    }),
  }),
})

而且我也不知道如何从

这种状态获得 data

state.shippingOptions.queries['getShippingOptions(null)'].data[0].value