为什么成功的变异请求中的数据在Redux Toolkit Query中可能未定义

q1qsirdb  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(64)

在if语句中,当请求成功时,数据类型为const data: IAuthResponse | undefined。为什么会这样呢?

const [login, { data, isSuccess }] = useLoginMutation()
  const onSubmit = (loginData: ILoginData) => {
    login(loginData)
  }
  if (isSuccess) {
      localStorage.setItem('token', data.accessToken)
    }

此处定义端点:

login: builder.mutation<IAuthResponse, ILoginData>({
        query: ({ email, password }) => ({ url: '/login', method: "POST", body: { email, password } }),
        invalidatesTags: ['Auth'],
      }),

由于isSucces表示最后一次触发的变化包含来自成功请求的数据,因此我认为data不会是未定义的

wnavrhmk

wnavrhmk1#

我找到了使用onQueryStarted来避免这个问题的方法,通常它似乎是更好的方法:

login: builder.mutation<IAuthResponse, ILoginData>({
    query: ({ email, password }) => ({ url: '/login', method: "POST", body: { email, password } }),
    invalidatesTags: ['Auth'],
    async onQueryStarted(_, { queryFulfilled }) {
      try {
        const { data } = await queryFulfilled
        localStorage.setItem('token', data.accessToken)
      } catch (err) {
        console.log(err)
      }
    },
  }),

(但是,我仍然想知道为什么data在我的问题案例中可能是未定义的。

相关问题