reactjs - React 查询突变现在确实会使用相同的输入再次触发
问题描述
当我尝试使用该useMutation
钩子进行 POST API 调用时,它第一次以正确的响应(成功或错误)工作。如果这是一个错误,如果我用与以前相同的数据重试突变,什么也不会发生。如果我使用不同的数据,它会重新发送 POST 请求。
这是我的用例:我有一个文件输入。用户上传文件,使用 POST API 通过 POST API 发送文件,useMutation
发生错误。现在,如果我作为用户尝试重新上传相同的文件,则不会发生任何事情。但如果用不同的文件重新上传,API 会再次发送。
这是我的input
代码:
const [newAvatarFile, setNewAvatarFile] = useState<File>(null);
const { isSuccess, error, isLoading, mutate } = useMutation(updateUserAvatar);
useEffect(() => {
newAvatarFile && mutate(newAvatarFile);
}, [newAvatarFile, mutate]);
return (
<input
type="file"
accept={'image/*'}
onChange={(e: ChangeEvent<HTMLInputElement>) => {
setNewAvatarFile(e.target.files[0]);
}}
/>
)
这是我的 API 调用函数updateUserAvatar
:
import { AxiosError, AxiosResponse } from 'axios';
import { Axios } from '../axios-instance';
export const updateUserAvatar = async (data: File): Promise<Record<string, string>> => {
let result: AxiosResponse;
try {
result = await Axios.post(
'/some/api/url',
{ profile_picture: data },
{
headers: {
'Content-Type': 'multipart/form-data',
},
}
);
} catch (err) {
const error = err as AxiosError;
throw new Error(
error.response ? error.response.data.message || error.response.data : error.message
);
}
return result.data;
};
解决方案
我只能猜测效果没有运行是因为文件被认为是相同的?您是否可以在 onChange 处理程序中运行突变:
const [newAvatarFile, setNewAvatarFile] = useState<File>(null);
const { isSuccess, error, isLoading, mutate } = useMutation(updateUserAvatar);
return (
<input
type="file"
accept={'image/*'}
onChange={(e: ChangeEvent<HTMLInputElement>) => {
setNewAvatarFile(e.target.files[0]);
mutate(e.target.files[0])
}}
/>
)
我认为这更明确,如果你只需要它来实现效果,也许你甚至可以摆脱newAvatarFile
状态,留下:
const { isSuccess, error, isLoading, mutate } = useMutation(updateUserAvatar);
return (
<input
type="file"
accept={'image/*'}
onChange={(e: ChangeEvent<HTMLInputElement>) => {
mutate(e.target.files[0])
}}
/>
)
推荐阅读
- python - 条件匹配时追加元素以存在
- php - PHP & CSV - 只回显一次结果
- c# - 到底哪个类抛出异常?
- git - 如何使 intellij 与使用 hashbang 的 git hooks 一起工作?
- amazon-web-services - 仅在 URI 中设置 AWS S3 Key 标头
- c++ - OpenGL VBO 索引(如何计算索引数组)
- powershell - 我正在尝试使用抛出异常的 send-mailmessage 通过 powershell 发送邮件
- flutter - 如何在 Flutter 中以这种格式从 API 中获取数据
- java - java : Coverity - 锁定对象的错误选择
- r - 在数据框上运行 summary() 函数时,分类变量未正确汇总