【发布时间】:2019-03-10 22:37:32
【问题描述】:
我有以下 React 组件连接到 Redux 存储,即使存储的状态发生了变化(我检查过),组件 prop userIsLogged 也不会改变它的值。任何帮助表示赞赏!
const mapDispatchToProps = (dispatch) => bindActionCreators({deauthenticateUser}, dispatch);
const mapStateToProps = (state) => ({ userIsLogged: state.auth.loggedUser !== null });
const Logout = (props) => {
const { userIsLogged } = props;
return (
userIsLogged?
<Button
variant="outlined"
color="primary"
onClick={(e) => {
props.deauthenticateUser();
history.push('/login');
}}>
Exit
</Button>
:<div />
);
}
Logout.propTypes = {
userIsLogged: PropTypes.bool.isRequired
};
export default connect(mapStateToProps, mapDispatchToProps)(Logout);
reducer如下:
const initialState = {
jwt: null,
loggedUser: null,
isLoading: false
}
export default function auth(state = initialState, action) {
switch (action.type) {
case 'GOT_JWT':
return Object.assign(state, { jwt: action.jwt });
case 'USER_LOGGING_IN':
return Object.assign(initialState, { isLoading: action.isLoading });
case 'USER_LOGGED_IN':
return Object.assign(state, { loggedUser: action.loggedUser, isLoading: false });
case 'NO_JWT':
return initialState;
case 'USER_LOGGED_OUT':
return initialState;
default:
return state;
}
}
【问题讨论】:
-
您是否遵循组件的数据更改流程(
mapStateToProps... 中的调试器/断点等)?你的 action/reducer 发生了什么? -
能贴一下reducer吗?您可能正在改变状态。
-
@MaxMillington 刚刚更新了问题。
-
@JohnRuddell 不,我一直在用console.log调试,哈哈。
-
Object.assign(state, { jwt: action.jwt });->Object.assign({}, state, { jwt: action.jwt });,以此类推
标签: reactjs redux react-redux