#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, используя подходы разделения кода, но автоматическое аннулирование будет работать.