运行graphql后,若我快速返回到上一页,则会发生错误

运行graphql后,若我快速返回到上一页,则会发生错误,graphql,Graphql,在使用graphql运行变种之后,如果我快速返回到上一页, 发生错误:警告:无法对未安装的组件执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。若要修复,请取消所有订阅和 %s.%s中的异步任务,一个useEffect清理功能, 我想这是因为我在变异过程中很快进入了另一个页面。 如果不是这样,就没有错误。 (即使发生错误,更新也会成功。但我担心错误) 即使在变异过程中移动到另一个页面,我也希望按原样继续更新 我如何继续更新 如果没有办法,有没有办法在变异过程中创造一个延

在使用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点火部件?