使用history.push时如何正确清理useEffect?

时间:2020-01-27 09:25:00

标签: javascript reactjs react-redux

我正在使用react-redux并根据prop的值重定向用户。如何处理控制台中产生的错误?

我使用过useEffect将用户推送到基于道具的不同组件。我不确定这是否是正确的方法。

  useEffect(() => {
    if (isAuthenticated) {
      history.push("/");
    } else if (signup) {
      history.push("/signup");
    }
  });

无法在已卸载的组件上执行React状态更新。这是 无操作,但表示您的应用程序内存泄漏。修理, 取消useEffect清理中的所有订阅和异步任务 功能。

2 个答案:

答案 0 :(得分:0)

如果我们提供isAuthenticated变量以使用useEffect,则只有在isAuthenticated是change时,它才会运行

 useEffect(() => {
    if (isAuthenticated) {
      history.push("/");
    } else if (signup) {
      history.push("/signup");
    }
  },[isAuthenticated]); // pass isAuthenticated it will check changes of isAuthenticated and run our useEffect callback if changes found

答案 1 :(得分:0)

useEffect():在每个渲染周期之后以及每个渲染周期

useEffect(()=> {}); //毫无争议地充当componentDidUpdate

useEffect(()=> {},[]); //具有空数组的论点充当componentDidMount

(第一次渲染后仅运行一次)

 useEffect(() => {
    if (isAuthenticated) {
      history.push("/");
    } else if (signup) {
      history.push("/signup");
    }
  },[isAuthenticated]); //passing a value will remove the error that you are receiving and check for the variable responsible for change , if changes are found it will run useEffect callback.