как обновить состояние в запросе rtk с помощью эффекта использования

#redux-toolkit #rtk-query

Вопрос:

у меня есть две конечные точки, когда я добавляю новое значение в конечную точку один, я хочу, чтобы конечная точка два была обновлена с помощью крючка useEffect

 const PostDetails = (props) => {
   const id = props.match.params.id;

   const [addNewComment, { isSuccess: success, isError }] = useAddNewCommentMutation();

 

   const dispatch = useDispatch();

   const selectPost = useMemo(() => postApi.endpoints.getPost.select(id), [id]);
   const { data: post, isLoading } = useSelector(selectPost);

   useEffect(() => {
      const result = dispatch(postApi.endpoints.getPost.initiate(id));

      return result.unsubscribe;
   }, [id, dispatch, success]);
 

в нем было указано
имя(pin-код):»Ошибка условия»
сообщение(pin-код):»Прервано из-за обратного вызова условия, возвращающего ложь».

Ответ №1:

Это просто означает, что «данные уже есть, и у меня нет оснований предполагать, что они устарели, я не собираюсь извлекать их снова».

Вы можете сделать

 dispatch(postApi.endpoints.getPost.initiate(id, {forceRefetch: true}));
 

но это не то, что вы должны делать здесь.

Что вам действительно следует использовать, так это эту invalidation функцию.

Таким образом , ваша конечная getPost точка имеет providesTags функцию, которая возвращает [{ type: 'Post', id: 5 }] , и ваша addNewComment мутация также имеет invalidatesTags функцию, которая возвращает [{ type: 'Post', id: 5 }] .

Таким образом, всякий раз, когда вы вызываете эту addNewComment мутацию, getPost конечная точка будет повторно фиксироваться.

Пожалуйста, прочитайте главу документации об автоматической повторной установке

Комментарии:

1. спасибо, что ваш ответ решил мою проблему, добавьте новое предложение в независимую таблицу, а не в таблицу post, по какой причине мне нужно повторно выбрать getPost

2. Обычно в вашем приложении должен быть только один API, мы указываем это во многих местах документации. Используйте более одного createApi вызова только в том случае, если у вас есть совершенно несвязанные данные, например, один api получает доступ к данным из facebook, а другой-к Twitter. Ваши данные здесь, очевидно, не являются несвязанными, иначе вам не нужно было бы запускать эту повторную выборку. Вы все еще можете разделить этот один api, используя подходы разделения кода, но автоматическое аннулирование будет работать.