Javascript 更新状态后如何重定向用户?
我有一个React登录页面,它调用nodejsapi进行身份验证(由Axios)。这似乎很有效。成功时返回true,失败时返回错误消息。Ps:我没有使用JWT,而是使用会话。我希望在成功登录后,组件中的状态(全局)发生更改,然后将用户重定向到仪表板 我的代码似乎改变了全局状态(Redux),在成功登录后进行的测试中没有问题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
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>
)
}