You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TanStack Query useMutation实现删除按钮加载状态遇报错及无效问题

TanStack Query useMutation 无isLoading属性且加载状态不显示的解决方法

核心问题分析

你遇到的两个问题根源一致:TanStack Query v4 版本对 useMutation 的状态属性做了重命名,同时代码里存在拼写错误导致加载样式失效。

具体解决步骤

  1. 替换状态属性名
    TanStack Query v4 起,useMutation 的加载状态属性从 isLoading 更名为 isPending,原属性已被移除,这就是TypeScript报错的原因。把代码中所有的 isLoading 替换为 isPending 即可解决类型错误。

  2. 修复样式拼写错误
    代码里的 loaddeing-xs 是拼写错误,正确应为 loading-xs,这个错误会导致加载 spinner 无法正常显示。

修改后的完整代码

const ButtonAction = ({ id }: ButtonActionProps) => {
  const router = useRouter();

  const { mutate: deletePost, isPending } = useMutation({
    mutationFn: () => {
      return axios.delete(`/api/posts/${id}`);
    },
    onError: (error) => {
      console.error(error);
    },
    onSuccess: () => {
      router.push("/");
      router.refresh();
    },
  });

  return (
    <div>
      <Link href="/edit/1" className="btn mr-2">
        <Pencil /> Edit
      </Link>
      <button onClick={() => deletePost()} className="btn btn-error">
        {isPending && (
          <span className="loading loading-spinner loading-xs"></span>
        )}
        {isPending ? (
          "Loading..."
        ) : (
          <>
            <Trash />
            Delete
          </>
        )}
      </button>
    </div>
  );
};

export default ButtonAction;

额外验证建议

  • 可以在 mutationFn 中添加 console.log,确认点击删除按钮时是否正确触发了请求
  • 打开浏览器开发者工具的Network标签,查看请求是否处于pending状态,验证加载逻辑是否正常触发

内容的提问来源于stack exchange,提问作者Stykgwar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 14:52:09