Я создавал веб-приложение для фильмов, используя React и tmdb API. У меня есть страница под названием Movies.jsx, где все фильмы извлекаются с помощью запроса реакции, и это отлично работает. У меня также есть страница movieInfo.jsx, которая отвечает за отображение подробностей конкретного фильма на основе идентификатора в URL-адресе с использованием запроса реакции.
Проблема в том, что когда я открываю фильм, возвращаюсь к списку фильмов, а затем открываю другой, на странице movieInfo отображаются данные предыдущего фильма. Через несколько секунд он повторно отображает пользовательский интерфейс и показывает тот, на который я нажал.
Как решить эту проблему, чтобы информация о предыдущем фильме не отображалась после нажатия на другой фильм?
Я новичок в реагировании на запрос, спасибо.
Попытка получить данные с помощью запроса реакции
Код MovieInfo.jsx:
const { movieId } = useParams();
const { data: movieInfo, isLoading } = useQuery({
queryKey: ["movieInfo"],
queryFn: () => getMovieInfoById(movieId),
onError: (err) => console.info(err),
});
Я думаю, обновите данные, которые могут вам подойти. Прежде чем вернуться на страницу «Фильмы», вы можете аннулировать данные запроса для страницы MovieInfo. Это заставит React Query повторно получить данные при следующем отображении страницы MovieInfo.
@shahabasparamban можешь показать мне как это сделать, пожалуйста
@ahmedahmedx: Давайте попробуем использовать invalidateQuery(movieInfo) каждый раз, когда вы возвращаетесь на страницу со списком фильмов.





Я думаю, что причиной вашей проблемы является механизм кэширования по умолчанию react-query.
Вы определили ключ запроса для вызова API информации о фильме movieInfo, и react-query считает, что это тот же запрос, и использует кэшированный ответ вместо повторной выборки нового.
Вы должны определить строку queryKey в этом руководстве из tanstack.
// An individual movie
useQuery({ queryKey: ['movieInfo', 5], ... })
Полный документ здесь: https://tanstack.com/query/latest/docs/framework/react/guides/query-keys#array-keys-with-variables
Можете ли вы предоставить минимальный пример кода? Это может быть связано с этим stackoverflow.com/questions/68491200/…?