min*_*nsu 9 javascript frontend reactjs react-query
查询,\n我现在正在制作一个公告板。\n因此,我将信息title, content中的值 \xe2\x80\x8b\xe2\x80\x8bof 放入函数Form中。在该值中,console.log没有反应。react-queryonSuccess
export const useAddFAQPost = () => {\n return useMutation(FaqPost)\n}\n\nexport function FaqPost(data: FAQ) {\n return axios.post<FAQ>('/add', data, {\n \n })\n}\nRun Code Online (Sandbox Code Playgroud)\n const { mutate } = useAddFAQPost()\n\n const onSubmit = useCallback((event: React.ChangeEvent<FormEvent>) => { \n event.preventDefault();\n return mutate({ title, type } as FAQ), {\n onSuccess: async (data: string, context: string) => {\n console.log(data);\n console.log('why not?');\n },\n onError: async (data: string, context: string) => {\n console.log(data);\n } \n };\n }, [title, type])\n\nreturn (\n <> \n <form onSubmit={onSubmit}>\n <input type="text" name="title" value={title} ... />\n <option value="faq">FAQ</option>\n </form>\n </>\n)\nRun Code Online (Sandbox Code Playgroud)\n如果onSubmit成功或失败,onSuccess、onError中的console.log应该被记录,但没有被记录。为什么要这样做?\nonSuccess,onError 似乎没有响应。
\n我不知道为什么。帮助
\n小智 23
接受的答案是不正确的。onSuccess/onError 处理程序也可用于“mutate”方法(https://react-query.tanstack.com/reference/useMutation)。
这里的问题是,如果您的组件在突变完成之前卸载,那么这些额外的回调将不会运行。因此,您必须确保进行突变的组件不会卸载。在你的情况下:
const {
mutate
} = useAddFAQPost()
const onSubmit = useCallback((event: React.ChangeEvent < FormEvent > ) => {
event.preventDefault();
return mutate({
title,
type
}
as FAQ), {
onSuccess: async(data: string, context: string) => {
console.log(data);
console.log('why not?');
},
onError: async(data: string, context: string) => {
console.log(data);
},
onSettled: () => {
// Some unmounting action.
// eg: if you have a form in a popup or modal,
// call your close modal method here.
// onSettled will trigger once the mutation is done either it
// succeeds or errors out.
}
};
}, [title, type])Run Code Online (Sandbox Code Playgroud)
Ivo*_*Ivo -5
onSuccess / onError 等方法应在 useMutation 挂钩创建中定义,而不是在根据文档调用 mutate 函数时定义。
https://react-query.tanstack.com/guides/mutations
你必须适应你的需要,但想法是:
export const useAddFAQPost = () => {
return useMutation(FaqPost, {
onSuccess: async (data: string, context: string) => {
console.log(data);
console.log('why not?');
},
onError: async (data: string, context: string) => {
console.log(data);
}
})
}
Run Code Online (Sandbox Code Playgroud)
打电话的时候也可以传过去useAddFAQPost()