Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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
Javascript 更新状态后如何重定向用户?_Javascript_Reactjs_Redux_Axios_React Hooks - Fatal编程技术网

Javascript 更新状态后如何重定向用户?

Javascript 更新状态后如何重定向用户?,javascript,reactjs,redux,axios,react-hooks,Javascript,Reactjs,Redux,Axios,React Hooks,我有一个React登录页面,它调用nodejsapi进行身份验证(由Axios)。这似乎很有效。成功时返回true,失败时返回错误消息。Ps:我没有使用JWT,而是使用会话。我希望在成功登录后,组件中的状态(全局)发生更改,然后将用户重定向到仪表板 我的代码似乎改变了全局状态(Redux),在成功登录后进行的测试中没有问题 export const Login = () => { const loggedIn = useSelector(state => state.log

我有一个React登录页面,它调用nodejsapi进行身份验证(由Axios)。这似乎很有效。成功时返回true,失败时返回错误消息。Ps:我没有使用JWT,而是使用会话。我希望在成功登录后,组件中的状态(全局)发生更改,然后将用户重定向到仪表板

我的代码似乎改变了全局状态(Redux),在成功登录后进行的测试中没有问题

export const Login = () => {

    const loggedIn = useSelector(state => state.loggedIn)
    const dispatch = useDispatch()

    const axiosURL = 'http://127.0.0.1:3333'

    const [inputs, setInputs] = useState("")
    const [returnMessage, setReturnMessage] = useState("")

    const handleSubmit = (e) => {

        e.preventDefault()

        setTimeout(async (e) => {

            const { data } = await axios.post( axiosURL + '/login', inputs)

            setReturnMessage(data.message)

            if (!data.message) dispatch({ type: 'LOGIN' })

        }, 1000)
    }

    if (loggedIn) {

        return <Redirect to='/' />
    }

    return (... the JSX form code ...)
}
“/”是一个受保护的路由,当我将全局状态的默认值设置为true时,似乎又可以正常工作,页面加载时不会将用户重定向到“/login”。这是我的代码,用于在状态为false时重定向专用路由上的用户:

const PrivateRoute = ({ component: Component }) => (

    <Route render={props => (

        loggedIn ? (

            <Component {...props} />

        ) : (

            <Redirect to={{ pathname: '/login', state: { from: props.location } }} />
        )
    )}
    />
)
const privaterote=({component:component})=>(
(
洛格丁(
) : (
)
)}
/>
)

有没有人知道如何修复它,或者甚至为我需要的东西提出更好的解决方案?为了安全起见,我不想在客户端存储JWT。谢谢大家。

我通过添加全局状态日志作为道具修复了这个问题,如下所示:

const PrivateRoute = ({ component: Component, loggedIn }) => (

    <Route render={props => (

        loggedIn ? (

            <Component {...props} />

        ) : (

            <Redirect to={{ pathname: '/login', state: { from: props.location } }} />
        )
    )}
    />
)
const PrivateRoute=({component:component,loggedIn})=>(
(
洛格丁(
) : (
)
)}
/>
)
以及:

export const Routes=()=>{
const loggedIn=useSelector(state=>state.loggedIn)
返回(
)
}
如果有人知道更好的方法,请告诉我

const PrivateRoute = ({ component: Component, loggedIn }) => (

    <Route render={props => (

        loggedIn ? (

            <Component {...props} />

        ) : (

            <Redirect to={{ pathname: '/login', state: { from: props.location } }} />
        )
    )}
    />
)
export const Routes = () => {

    const loggedIn = useSelector(state => state.loggedIn)

    return (
        <Switch>
            <PrivateRoute exact path="/" component={Home} loggedIn={loggedIn} />
            <Route exact path="/login" component={Login} />
            <Route component={Error404} />
        </Switch>
    )
}