Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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 当redux store数据更改时,组件在我刷新页面之前不会有新的redux store数据_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript 当redux store数据更改时,组件在我刷新页面之前不会有新的redux store数据

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

我有一个redux存储,我用它来存储登录令牌。登录组件是一个重要的ui popper,呈现为navbar下组件上方的一个框,它将执行异步任务,即登录并从服务器获取令牌,然后它将在redux存储中调度函数,并将令牌提供给它以更改redux状态并将令牌放置在其中。 问题是,当我登录时,函数被调度,我可以在redux devtools中看到令牌,但是没有任何react组件看到令牌,并且在我刷新页面之前没有令牌

这是我的登录组件:

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;
}