this.props.authState保持不变,尽管我在componentDidMount函数中调度了一个动作:
this.props.authState
componentDidMount
componentDidMount() { if (localStorage.getItem('token')) { dispatch(updateAuthState('AUTHENTICATED')); } } render() { <div>{this.props.authState}</div> } Home.propTypes = { authState: PropTypes.string }; const mapStateToProps = (state) => { return { authState: state.authState } }; const mapDispatchToProps = (dispatch) => { return { } }; export default connect(mapStateToProps, mapDispatchToProps)(Home);
输出为NO_AUTH(的初始值authState)
authState
减速器:
export function authState(state = "NO_AUTH", action) { switch (action.type) { case 'AUTH_STATE': return action.authState; default: return state; } }
知道为什么吗?
您当前正在直接在未映射到的componentDidMount内部调度:
connect(mapStateToProps, mapDispatchToProps)(Home);
这应该做的工作:
componentDidMount() { if (localStorage.getItem('token')) { this.props.onUpdateAuthState('AUTHENTICATED'); } } const mapDispatchToProps = (dispatch) => { return { onUpdateAuthState: function(authState) { dispatch(updateAuthState(authState)); } } };
现在,这将获得authState:
const mapStateToProps = (state) => { return { authState: state.authState } };