Javascript 当redux store数据更改时,组件在我刷新页面之前不会有新的redux store数据
我有一个redux存储,我用它来存储登录令牌。登录组件是一个重要的ui popper,呈现为navbar下组件上方的一个框,它将执行异步任务,即登录并从服务器获取令牌,然后它将在redux存储中调度函数,并将令牌提供给它以更改redux状态并将令牌放置在其中。 问题是,当我登录时,函数被调度,我可以在redux devtools中看到令牌,但是没有任何react组件看到令牌,并且在我刷新页面之前没有令牌 这是我的登录组件:Javascript 当redux store数据更改时,组件在我刷新页面之前不会有新的redux store数据,javascript,reactjs,redux,Javascript,Reactjs,Redux,我有一个redux存储,我用它来存储登录令牌。登录组件是一个重要的ui popper,呈现为navbar下组件上方的一个框,它将执行异步任务,即登录并从服务器获取令牌,然后它将在redux存储中调度函数,并将令牌提供给它以更改redux状态并将令牌放置在其中。 问题是,当我登录时,函数被调度,我可以在redux devtools中看到令牌,但是没有任何react组件看到令牌,并且在我刷新页面之前没有令牌 这是我的登录组件: class Login extends React.Component
class Login extends React.Component {
state = {
invalidMsg: ""
}
handleSubmit = (e) => {
e.preventDefault();
this.props.LogBackdrop(true) //using redux to set a variable to true that shows backdrop
let url = db.url+"/users/login"
fetch(url, {
method: "POST",
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({username: LU, password: LP})
}).then((res => res.json().then(msg => {
if (msg.token) {
this.props.handleClose(msg.token)
this.props.onLogin(msg.token, msg.username) //dispatch and send data to change state
}else {
this.props.LogBackdrop(false)
this.setState({invalidMsg: "error wrong password"})
}
})
)).catch(err => {
//who cares?!!
})
}
}
handleLogout = (e) => {
e.preventDefault();
this.props.LogBackdrop(true)
this.props.onLogout();
this.props.handleClose()
}
render() {
return (
//boxes and buttons for login
);
};
};
const MapStateToProps = state => {
return {token: state.token, username: state.username}
}
const MapDispatchToProps = dispatch => {
return {
onLogin: (token, username) => dispatch(LoginAction(token, username)),
LogBackdrop: (bool) => dispatch(logBackdrop(bool)),
onLogout: () => dispatch(LogoutAction())
}
}
export default connect(MapStateToProps, MapDispatchToProps)(Login)
这是我的登录操作:
export const LGAction = (token,username,admin,exp)=>{
let obj = {
type:login,
token:token,
username:username,
exp:exp
}
return obj
}
和登录还原程序:
const Login = (action,state) => {
let newState = state
if (state===undefined) {newState = Object.assign({}, initialState)}
newState.token = action.token
//I use this part to load the cart to redux store while logging in
let cart = JSON.parse(localStorage.getItem("cart"));
if (cart) {
newState.cart = cart.totalQty
}
newState.username = action.username
newState.logging = false
const expDate = action.exp ? action.exp : new Date(new Date().getTime() + (96 * 60 * 60 * 1000))
localStorage.setItem("token", action.token);
localStorage.setItem("exp", expDate);
localStorage.setItem("user", action.username)
console.log(newState);
return newState;
}