Javascript 如何使用contextAPI在分派中使用Wait?

Javascript 如何使用contextAPI在分派中使用Wait?,javascript,reactjs,Javascript,Reactjs,我在将用户重定向到仪表板时遇到问题,我只想确保发送完成,然后开始将用户重定向到另一个页面。但我不知道怎么做。我是新来的,所以请帮助我 const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const { dispatch } = useContext(AuthContext); const location = useLoca

我在将用户重定向到仪表板时遇到问题,我只想确保发送完成,然后开始将用户重定向到另一个页面。但我不知道怎么做。我是新来的,所以请帮助我

 const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");
  const { dispatch } = useContext(AuthContext);
  const location = useLocation();
  const history = useHistory();

  const submit = (e) => {
    e.preventDefault();
    axios
      .post(`${process.env.REACT_APP_API_URL}/auth/login`, { email, password })
      .then((response) => {
        dispatch({
          type: "LOGIN_USER",
          payload: response.data.token,
        });
        let { from } = location.state || { from: { pathname: "/" } };
        history.replace(from);
      })
      .catch((error) => {
        console.log(error);
      });
  };

const reducer=(状态、操作)=>{
开关(动作类型){
案例“登录用户”:
setItem(“token”,action.payload.token);
打破
案例“注销”:
sessionStorage.removietem(“令牌”);
打破
违约:
抛出新错误();
}
};
const AuthProvider=(道具)=>{
const[state,dispatch]=useReducer(减速机);
const[isLoggedIn]=useState(!!sessionStorage.getItem(“令牌”);
返回(
....

感谢任何解决方案!

原因是调度将在下一个周期完成。因此,您不能立即执行操作

据我所知,基于您的代码,可能有两种方法

  • 放置
    历史记录。在
    登录\u用户
    操作中替换
    。以便在设置令牌后,执行重定向

  • 向有效负载添加回调函数。在设置令牌后,调用回调函数

  • 下面是使用方法2)的片段

    在我看来

        case "LOGIN_USER":
          sessionStorage.setItem("token", action.payload.token);
          action.payload.callback()
          break;
    
    顺便说一句,我也注意到,你的负载需要是一个对象,例如

      { token: ..., }
    

    原因是调度将在下一个周期完成,所以您不能立即执行

    据我所知,基于您的代码,可能有两种方法

  • 放置
    历史记录。在
    登录\u用户
    操作中替换
    。以便在设置令牌后,执行重定向

  • 向有效负载添加回调函数。在设置令牌后,调用回调函数

  • 下面是使用方法2)的片段

    在我看来

        case "LOGIN_USER":
          sessionStorage.setItem("token", action.payload.token);
          action.payload.callback()
          break;
    
    顺便说一句,我也注意到,你的负载需要是一个对象,例如

      { token: ..., }