Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何在useEffect()钩子中使用useDispatch()钩子?_Reactjs_Redux_React Redux - Fatal编程技术网

Reactjs 如何在useEffect()钩子中使用useDispatch()钩子?

Reactjs 如何在useEffect()钩子中使用useDispatch()钩子?,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我正在我的功能应用程序组件中使用useffect()钩子来检查身份验证是否已过期,以便我可以调度一个操作来删除持久化身份验证状态(使用redux persist)。代码如下: import React,{useffect}来自“React”; 从“react Router dom”导入{BrowserRouter as Router,Switch,Route}; 从“react redux”导入{useDispatch,useSelector}; 从“/app/state/authSlice”导

我正在我的功能应用程序组件中使用useffect()钩子来检查身份验证是否已过期,以便我可以调度一个操作来删除持久化身份验证状态(使用redux persist)。代码如下:

import React,{useffect}来自“React”;
从“react Router dom”导入{BrowserRouter as Router,Switch,Route};
从“react redux”导入{useDispatch,useSelector};
从“/app/state/authSlice”导入{signout};
从“/app/pages/sign”导入登录;
从“/app/pages/Landing”导入登录;
常量应用=(道具)=>{
const dispatch=usedpatch();
const auth=useSelector((state)=>state.auth);
const expired=新日期(Date.now())>=新日期(auth.expires);
useffect(()=>{
常量main=()=>{
如果(过期){
log(“身份验证已过期”);
签派;
}
};
main();
},[发送,过期];
返回(
);
};
导出默认应用程序;

现在,当过期时间已过时,我将获得
Auth expired
控制台日志,但调度没有发生,过期时间过后我的状态仍然存在。我知道注销操作配置正确,因为我在另一个组件onClick中使用了它。

这只是一个输入错误。我忘了调用
注销()
操作创建者

请更正下面的代码

import React, { useEffect } from "react";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import { useDispatch, useSelector } from "react-redux";
import { signout } from "./app/state/authSlice";

import SigninPage from "./app/pages/Signin";
import LandingPage from "./app/pages/Landing";

const App = (props) => {
  const dispatch = useDispatch();
  const auth = useSelector((state) => state.auth);
  const expired = new Date(Date.now()) >= new Date(auth.expires);
  useEffect(() => {
    const main = () => {
      if (expired) {
        console.log("Auth expired.");
        dispatch(signout());
      }
    };
    main();
  }, [dispatch, expired]);

  return (
    <Router>
      <Switch>
        <Route exact path="/" {...props} component={LandingPage} />
        <Route exact path="/signin" {...props} component={SigninPage} />
      </Switch>
    </Router>
  );
};

export default App;

import React,{useffect}来自“React”;
从“react Router dom”导入{BrowserRouter as Router,Switch,Route};
从“react redux”导入{useDispatch,useSelector};
从“/app/state/authSlice”导入{signout};
从“/app/pages/Signin”导入登录页;
从“/app/pages/Landing”导入登录页面;
常量应用=(道具)=>{
const dispatch=usedpatch();
const auth=useSelector((state)=>state.auth);
const expired=新日期(Date.now())>=新日期(auth.expires);
useffect(()=>{
常量main=()=>{
如果(过期){
log(“身份验证已过期”);
签派(signout());
}
};
main();
},[发送,过期];
返回(
);
};
导出默认应用程序;