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
的初始值)
减速器:
export function authState(state = "NO_AUTH", action) {
switch (action.type) {
case 'AUTH_STATE':
return action.authState;
default:
return state;
}
}
知道为什么吗?
答案 0 :(得分:0)
如果要更改状态,则不会重新呈现组件。您需要从减速器中返回{...state, authState}
。
然后在
componentWillReceiveProps(nextProps)
{
}
我希望这可以解决问题。
答案 1 :(得分:0)
您当前正在直接在未映射到的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
}
};