javascript - 如何在使用 react(redux) 渲染之前设置状态
问题描述
我想让一个组件在未登录时能够重定向。组件是用 react 制作的,检查 auth 功能适用于 redux。
//App.js
class App extends Component {
checkUserInfo () => {
const loggedInfo = storage.get('loggedInfo');
if(!loggedInfo) return;
const { UserActions } = this.props;
UserActions.setLoggedInfo(loggedInfo)
}
constructor(props) {
super(props);
this.checkUserInfo();
}
render() {
console.log(this.props.logged)
return(...)
}
}
export default connect((state) => ({logged: state.user.get('logged')}, (dispatch)=> ...)
UserActions.setLoggedInfo
动作是这样的。
...
export default handleActions({
[SET_LOGGED_INFO]: (state, action) => {
return state.set('logged', true)
}
})
...
所以,我想要在未登录身份验证时重定向组件的情况。我制作了一个渲染组件<Route/>
,其条件是if state.logged==false
, <Redirect to='login/>
。
但在最前面一点,在执行checkUserInfo
函数之前记录为假。所以当我登录时,重定向到/login
,当我没有登录时,/login
也重定向到。
//PrivateRoute.js
...
render() {
const { logged } = this.props;
console.log(logged);
return(
<Route path="/myPage" render={props =>
logged ? <Component/> : <Redirect to={{pathname: '/login'}}/>
}/>
)
}
...
这是屏幕截图什么是logged
控制台中的值。
我想在 myFunction() 设置状态之前跳过非常前面的状态checkUserInfo
,我该怎么做。
请帮助我。很抱歉英语语法不好。
解决方案
像这样设置 PrivateRoute
这有助于以简单的方式检查身份验证。
推荐阅读
- javascript - javascript中console.log和运算符类型的工作以及javascript中类型转换的示例
- sql - 在同一过程中设置两个行源非常慢 - Access 2010
- jquery - 需要 Jquery 帮助 - 2 点击 2 功能
- c# - C# 8 位置模式与解构模式
- gitlab - gitlab pages : 用于 certbot 挑战的特殊 webroot
- ios - 来自此 iOS 客户端应用程序的 FirebaseAuth 请求被阻止?
- angular - Angular6 Typescript Signalr:尽管客户端连接到 SignalR Hub,但没有收到任何事件
- sql - 如何计算连续日期系列中的一天数?
- material-ui - Material-ui v1 Safari iOS 支持
- spring - @UniqueConstraint 需要在 MariaDB 中更改表,如果表之前已经存在且没有约束?