gpt4 book ai didi

reactjs - React Redux 组件不更新

转载 作者:行者123 更新时间:2023-12-03 13:42:15 26 4
gpt4 key购买 nike

我正在尝试使用 React + Redux(SSR 和 Thunks)来实现身份验证(注册/退出)。我不知道为什么 Redux 状态更新时组件没有更新......

这是应该重新渲染的组件:

class Navbar extends React.Component {
constructor(props) {
super(props);
this.state = {
loggedIn: props.authentication.loggedIn
};
}

render() {
let links = null;
if (this.state.loggedIn) {
links = ...
} else {
links = ...
}

return (<Toolbar>{links}</Toolbar>)
}
}

const mapStateToProps = state => {
return {
authentication: state.authentication
}
}

const mapDispatchToProps = dispatch => {
return {
signOut: () => {dispatch(userActions.logout())}
}
}

const AuthNavbar = connect(mapStateToProps, mapDispatchToProps)(Navbar)
export default AuthNavbar;

那是我的 reducer :

const reducers = {
authentication,
registration,
alert
}

const todoApp = combineReducers(reducers)
export default todoApp

身份验证缩减器:

const authentication = (state = initialState, action) => {
switch (action.type) {
...
case userConstants.LOGIN_SUCCESS:
return Object.assign({}, state, {
loggedIn: true,
loggingIn: false,
user: action.user
});
...
default:
return state;
}
}

操作 - 登录:

function login(email, password) {
return dispatch => {
dispatch({type: userConstants.LOGIN_REQUEST, email});
userService.login(email, password).then(
user => {
dispatch({type: userConstants.LOGIN_SUCCESS, user});
},
error => {
dispatch({ type: userConstants.LOGIN_FAILURE });
dispatch({type: alertActions.error(error)});
}
);
}
}

UserService.login 是一个调用 api 并获取的函数。看起来 Action 被触发了,Redux 状态被更新,但组件没有更新: enter image description here仔细检查 Redux Dev Tools - 状态确实得到更新,所以我使用连接实用程序的方式一定有问题?

最佳答案

您将 logedin 属性存储在构造函数内的状态中,该构造函数在组件的生命周期中仅运行一次。
当新的 prop 返回时,您不会更新状态。

直接使用 Prop :

if (this.props.authentication.loggedIn) {
links = ...

或者更新 componentWillReceiveProps 中的状态

componentWillReceiveProps(nextProps){
// update the state with the new props
this.setState({
loggedIn: nextProps.authentication.loggedIn
});
}

关于reactjs - React Redux 组件不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48391794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com