fix(catalog): уберём cache-touch после Delete — просто navigate
Предыдущий фикс с qc.removeQueries({queryKey:['/api/catalog/products', id]})
+ invalidateQueries(exact:true) — оказался не до конца верным:
1) removeQueries на ещё-mounted ProductEditPage с активной подпиской на этот
key триггерит refetch (TanStack заполняет пустой cache на active subscriber).
2) invalidateQueries({queryKey:['/api/catalog/products'], exact:true}) на
самом деле не матчит ни list (ключ имеет 6 элементов с пагинацией), ни item
(ключ из 2 элементов) — exact=true ищет ровно [...] из 1 элемента.
Правильно: просто navigate('/catalog/products'). React Query refetchOnMount
сам обновит list при заходе на ProductsPage (staleTime=0 default).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
61ca7fee90
commit
3cdb819331
|
|
@ -184,13 +184,13 @@ export function ProductEditPage() {
|
|||
const remove = useMutation({
|
||||
mutationFn: async () => { await api.delete(`/api/catalog/products/${id}`) },
|
||||
onSuccess: () => {
|
||||
// Сначала навигируемся ПРОЧЬ с edit-страницы (иначе оставшийся
|
||||
// useQuery(['/api/catalog/products', id]) после invalidate refetch'нёт
|
||||
// удалённый id и Toaster покажет «Не найдено» поверх редиректа). Затем
|
||||
// выкидываем item-кеш и обновляем список.
|
||||
// Просто navigate — компонент размонтируется, useQuery cleanup'нёт
|
||||
// подписку, мы НЕ дёргаем invalidate/removeQueries: они бы стриггерили
|
||||
// refetch на уже удалённый id (active subscriber на момент срабатывания)
|
||||
// и Toaster показал бы «Не найдено» поверх редиректа.
|
||||
// На /catalog/products fresh fetch list-query сам подгрузит актуальный
|
||||
// список без удалённой записи.
|
||||
navigate('/catalog/products')
|
||||
qc.removeQueries({ queryKey: ['/api/catalog/products', id] })
|
||||
qc.invalidateQueries({ queryKey: ['/api/catalog/products'], exact: true })
|
||||
},
|
||||
meta: { successMessage: 'Удалено' },
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in a new issue