运行graphql后,若我快速返回到上一页,则会发生错误
在使用graphql运行变种之后,如果我快速返回到上一页, 发生错误:警告:无法对未安装的组件执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。若要修复,请取消所有订阅和 %s.%s中的异步任务,一个useEffect清理功能, 我想这是因为我在变异过程中很快进入了另一个页面。 如果不是这样,就没有错误。 (即使发生错误,更新也会成功。但我担心错误) 即使在变异过程中移动到另一个页面,我也希望按原样继续更新 我如何继续更新 如果没有办法,有没有办法在变异过程中创造一个延迟 我很抱歉。我的英语不好运行graphql后,若我快速返回到上一页,则会发生错误,graphql,Graphql,在使用graphql运行变种之后,如果我快速返回到上一页, 发生错误:警告:无法对未安装的组件执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。若要修复,请取消所有订阅和 %s.%s中的异步任务,一个useEffect清理功能, 我想这是因为我在变异过程中很快进入了另一个页面。 如果不是这样,就没有错误。 (即使发生错误,更新也会成功。但我担心错误) 即使在变异过程中移动到另一个页面,我也希望按原样继续更新 我如何继续更新 如果没有办法,有没有办法在变异过程中创造一个延
const CalendarTodo = ({
month,
day,
data,`enter code here`
isImportWhether,
setIsImportWhether
}) => {
const [value, setValue] = useState("");
const monthDay = `${month + 1}월 ${day}일`;
const [createToDoMutation] = useMutation(CREATE_TODO, {
variables: {
toDoId:
data &&
data.toDos &&
data.toDos.filter(object => object.monthDay === monthDay)[0] &&
data.toDos.filter(object => object.monthDay === monthDay)[0].id,
monthDay: monthDay,
dayToDo: value,
importEvent: isImportWhether
},
update: (proxy, { data: { createToDo } }) => {
const data = proxy.readQuery({ query: SEE_TODO_OF_ME });
data &&
data.toDos &&
data.toDos.filter(object => object.monthDay === monthDay)[0] &&
data.toDos
.filter(object => object.monthDay === monthDay)[0]
.dayToDo.push(createToDo);
proxy.writeQuery({ query: SEE_TODO_OF_ME, data });
},
optimisticResponse: {
createToDo: {
__typename: "DayToDo",
id: Math.random().toString(),
toDoList: value,
importEvent: isImportWhether
}
}
});
return (
<>
);
};
export default CalendarTodo;
const CalendarTodo=({
月,
白天
data,`在这里输入代码`
是否导入,
设置导入是否
}) => {
const[value,setValue]=useState(“”);
const monthDay=`${month+1}월 ${day}일`;
常量[createToDomutate]=使用变异(CREATE_TODO{
变量:{
托多德:
资料&&
data.toDos&&
data.toDos.filter(object=>object.monthDay===monthDay)[0]&&
data.toDos.filter(object=>object.monthDay===monthDay)[0].id,
月日:月日,
dayToDo:值,
importEvent:是否导入
},
更新:(代理,{data:{createToDo}})=>{
const data=proxy.readQuery({query:SEE_TODO_OF_ME});
资料&&
data.toDos&&
data.toDos.filter(object=>object.monthDay===monthDay)[0]&&
data.toDos
.filter(object=>object.monthDay===monthDay)[0]
.dayToDo.push(创建todo);
writeQuery({query:SEE_TODO_OF_ME,data});
},
乐观回应:{
createToDo:{
__typename:“DayToDo”,
id:Math.random().toString(),
托多利斯特:价值观,
importEvent:是否导入
}
}
});
返回(
);
};
导出默认日历TODO;
正如您已经猜到的那样,原因是异步请求即使在卸载组件后仍会继续运行,这是由于导航离开了组件
有很多方法可以解决这个问题。一种是添加一个检查,检查您从中调用异步请求的组件是否仍在装入,并且仅在装入时更新其状态,例如:
useffect(()=>{
让isMounted=真;
apollo.mutate({查询,变量,更新:{
如果(已安装){
//更新状态之类的
}
})
return()=>{
isMounted=错误;
};
}, []);
但是,这种方法可能会丢失数据。如果要确保接收并存储返回值,则应将请求添加到更高级别的组件或上下文中,该组件或上下文在导航时不会卸载。这样,您可以触发异步调用,但不必担心导航问题。此组件的其余部分-f点火部件?