Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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 钩子中react类组件的这个.props.history.push('/some_route')的等价物是什么?_Reactjs_Routes_React Hooks - Fatal编程技术网

Reactjs 钩子中react类组件的这个.props.history.push('/some_route')的等价物是什么?

Reactjs 钩子中react类组件的这个.props.history.push('/some_route')的等价物是什么?,reactjs,routes,react-hooks,Reactjs,Routes,React Hooks,我正在努力做到这一点 import {isAuthorized} from '../somewhere' async componentDidMount() { const authorized = await isAuthorized() if(!authorized){ this.props.history.push('/login') } } 在react hook中,我如何实现这一精确功能,谢谢你需要使用useEffect hook: 但是react不允许在use

我正在努力做到这一点

import {isAuthorized} from '../somewhere'
async componentDidMount() {
   const authorized = await isAuthorized()
   if(!authorized){
   this.props.history.push('/login')
  }
}
在react hook中,我如何实现这一精确功能,谢谢你需要使用useEffect hook:

但是react不允许在useEffect钩子中直接执行异步操作。您可以在其中包装一个异步函数:

useEffect(() => {
  (async () => {
   //...
  })()
},[])
有关更多详细信息,请查看我的。

您需要使用useEffect挂钩:

但是react不允许在useEffect钩子中直接执行异步操作。您可以在其中包装一个异步函数:

useEffect(() => {
  (async () => {
   //...
  })()
},[])
欲知更多详情,请参阅我的

您需要将wait封装在一个异步函数中,并在useffect函数体中调用该异步函数apiCall


您需要将wait封装在一个异步函数中,并在useffect函数体中调用该异步函数apiCall。

我认为在这种情况下,您可以使用useHistory钩子,如下所示:

import React from 'react'
import { useHistory } from 'react-router-dom'

export default props => {
    const history = useHistory()

    React.useEffect(() => {
        const isLogged = async () => {
            const authorized = await isAuthorized()
            return authorized
        }
        const authorized = isLogged()
        if(!authorized)
            history.replace('/login') // to replace the route , in order to push : history.push('/login')
    },[])
}
编辑:


是的,它不能异步,我改变了答案。抱歉。

我认为在这种情况下,您可以使用useHistory挂钩,它的用法如下:

import React from 'react'
import { useHistory } from 'react-router-dom'

export default props => {
    const history = useHistory()

    React.useEffect(() => {
        const isLogged = async () => {
            const authorized = await isAuthorized()
            return authorized
        }
        const authorized = isLogged()
        if(!authorized)
            history.replace('/login') // to replace the route , in order to push : history.push('/login')
    },[])
}
编辑:

是的,它不能异步,我改变了答案。抱歉。

您可以使用hook访问历史记录实例并调用history.push到useEffect内部,以导航到所需的路径

从“../somewhere”导入{isAuthorized}; 从路由器dom导入{useHistory}; 功能部件{ const history=useHistory useEffect=>{ 常量导航=异步=>{ const authorized=等待授权; 如果!授权{ 历史记录。推送“/登录” } } //调用异步函数 导航 }, [] } 请记住,由于可能存在争用条件,React不允许useEffect回调为异步函数。因此,您必须在useEffect钩子中定义一个新的异步函数并调用它。

您可以使用钩子访问历史记录实例并调用history.push到useEffect内部以导航到所需的路由

从“../somewhere”导入{isAuthorized}; 从路由器dom导入{useHistory}; 功能部件{ const history=useHistory useEffect=>{ 常量导航=异步=>{ const authorized=等待授权; 如果!授权{ 历史记录。推送“/登录” } } //调用异步函数 导航 }, [] }
请记住,由于可能存在争用条件,React不允许useEffect回调为异步函数。因此,您必须在useEffect钩子中定义一个新的异步函数并调用它。

还有一个来自redux react钩子库的useDispatch钩子的替代方案。它通常用于调用store操作,而store操作又调用store reducer,但您也可以传递react router redux中定义的push方法,以传递路由/路径名数据

import {isAuthorized} from '../somewhere';
import {useDispatch} from "redux-react-hook";
import {push} from "react-router-redux";
async componentDidMount() {
   const authorized = await isAuthorized();
   const dispatch = useDispatch();
   if(!authorized){
      dispatch(push('/login'));
  }
}

还有一种选择来自redux react hooks库的useDispatch hook。它通常用于调用store操作,而store操作又调用store reducer,但您也可以传递react router redux中定义的push方法,以传递路由/路径名数据

import {isAuthorized} from '../somewhere';
import {useDispatch} from "redux-react-hook";
import {push} from "react-router-redux";
async componentDidMount() {
   const authorized = await isAuthorized();
   const dispatch = useDispatch();
   if(!authorized){
      dispatch(push('/login'));
  }
}

Hey man you Can Can UseffectAsync=>{…}react不允许这样Hey man you Can Can UseffectAsync=>{…}react不允许这样做你不能使Useffect函数异步我写得很匆忙,我的不好。这篇文章得到了更多令人惊讶的答案从类组件到函数组件的转换需要考虑很多因素。这篇文章得到了更多令人惊讶的答案:从类组件转换为函数组件时需要考虑很多因素。非常感谢,我之前对useEffect进行了异步回调,但它一直抛出错误,我会记住react不允许这样做,谢谢,我很高兴它有所帮助。非常感谢,我之前做过useEffect异步回调,但它一直抛出错误,我会记住react不允许这样做,谢谢你,我很高兴它有帮助。是的,我遇到了问题,因为我做了useEffect异步回调,谢谢你是的我先回答了这个你应该接受我的回答另外一个是的我遇到了问题因为我使用了useEffect回调异步,谢谢你是的我先回答了这个你应该接受我的回答其他人