typescript 如何在React-query中成功运行变异后导航到另一个页面?

ih99xse1  于 2023-01-27  发布在  TypeScript
关注(0)|答案(2)|浏览(89)

当我在一个突变后重定向到另一个页面时,它显示内存泄漏警告。我尝试了很多方法,但我没有找到任何解决方案。
警告是:

Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.
dm7nw8vv

dm7nw8vv1#

我们可以使用useEffect钩子来重定向到另一个页面,在这里我找到了一个使用自定义钩子的解决方案:

import { UseMutationResult } from '@tanstack/react-query';
import { useEffect } from 'react';
import { To, useNavigate } from 'react-router-dom';

export const useRedirectAfterMutation = <T, U>({
  mutation,
  navigateTo,
}: {
  mutation: UseMutationResult<T, Error, U, unknown>;
  navigateTo: To;
}) => {
  const navigate = useNavigate();

  useEffect(() => {
    if (mutation.isSuccess && !!navigateTo) {
      navigate(navigateTo);
    }
  }, [mutation.isSuccess, navigate, navigateTo]);

  return mutation.mutateAsync;
};
const App = () => {
  const createCategoryMutation = useCreateCategoryMutation();
  const createCategoryMutate = useRedirectAfterMutation({
    mutation: createCategoryMutation,
    navigateTo: 'url',
  });

  return (
    <div>
      <button onClick={() => {
        createCategoryMutate()
      }}>redirect after mutation</button>
    </div>
  )
}
nhn9ugyo

nhn9ugyo2#

您可以使用useMutation挂钩,然后在选项中使用onSuccess选项进行导航。

const navigate = useNavigate();
const { mutate } = useMutation((log) => console.log)

mutate('mutating', {
  onSuccess: () => {
        navigate('/url') //your url
      },
})

相关问题