Я пытаюсь использовать запрос RTK для извлечения данных из Firestore с помощью функции queryFn
. Проблема, с которой я столкнулся, заключается в том, что я разрабатываю мультимастер, в котором поля в форме инициализируются данными прямо из RTK Query.
Обновите поле ввода с помощью мутации на шаге 1. Перейти к шагу 2 Вернитесь к шагу 1 (выборка отклонена с ошибкой ConditionError, см. прикрепленный журнал)
export const userApi = createApi({
reducerPath: 'userApi',
baseQuery: fakeBaseQuery(),
tagTypes: ['User'],
endpoints: builder => ({
getUser: builder.query<Customer, string>({
async queryFn(userId) {
try {
const docSnapshot = await getDoc(doc(db, 'users', userId));
const customer = docSnapshot.data() as Customer;
return { data: customer };
} catch (err) {
return { error: err };
}
},
providesTags: (result, error, arg) => [{type: 'User', id: result.id }]
}),
updateUser: builder.mutation<{ success: boolean }, { userId: string; user: Partial<UserInfo> }>({
async queryFn(payload) {
const { userId, user } = payload;
try {
// Note: Id is same for both. Have also tried replacing with 'LIST'
const res = await updateDoc(doc(db, 'users', userId), { ...user });
return { data: { success: true } };
} catch (err) {
return { error: err ? err : null };
}
},
invalidatesTags: (result, error, { userId }) => [{ type: 'User', id: userId}],
})
})
});
export const { useGetUserQuery, useUpdateUserMutation } = userApi;
Я также пробовал использовать User
для тегов ProvideTag/invalidatesTags.
Я пытаюсь понять, почему второй запрос после возврата к шагу 1 формы не может получить данные, которые я только что обновил.
Я исправил эту проблему, обновив rtk с 1.8.5 до 1.9.0.
Кажется, был баг
invalidateTags работает правильно при работе с постоянным запросом государство.
https://github.com/reduxjs/redux-toolkit/releases/tag/v1.9.0