使用TanStack Query useMutation实现删除按钮加载状态遇报错及无效问题
TanStack Query useMutation 无
isLoading属性且加载状态不显示的解决方法 核心问题分析
你遇到的两个问题根源一致:TanStack Query v4 版本对 useMutation 的状态属性做了重命名,同时代码里存在拼写错误导致加载样式失效。
具体解决步骤
替换状态属性名
TanStack Query v4 起,useMutation的加载状态属性从isLoading更名为isPending,原属性已被移除,这就是TypeScript报错的原因。把代码中所有的isLoading替换为isPending即可解决类型错误。修复样式拼写错误
代码里的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
相关产品推荐
相关产品推荐

