Состояние Redux заполнено, но я получаю состояние ошибки NULL
В настоящее время я работаю над проектом, который включает в себя зарегистрированных пользователей. В моем избыточном состоянии у меня есть пользователь, который не является нулевым объектом. Но когда я пытаюсь получить роль от этого пользовательского объекта, я внезапно получаю сообщение об ошибке "состояние равно нулю"
this.props.userState.user
возвращает объект пользователя с атрибутом роли.
this.props.userState.user.role
выдает ошибку "Ошибка типа: this.props.userState.user имеет значение null"
редактировать: ниже приведен весь код во всем файле.
class ResultsMain extends Component {
componentDidMount() {
firebase.auth().onAuthStateChanged(user => {
if (user)
getUser(user.email).then(foundUser => {
console.log('User found:', foundUser);
this.props.doSetUser(foundUser);
}).catch((err) => {
console.log(err)
this.props.history.push('/');
});
});
}
render() {
console.log("THE PROPS", this.props.userState.user)
if (this.props.userState.role === "teacher") return <TeacherSearchPage/>
else return <Results />
//else return <div> </div>
}
}
function mapStateToProps(state) {
return {
userState: state.userState,
}
}
function mapDispatchToProps(dispatch) {
return {
doSetUser: user => dispatch(userActions.setUser(user)),
}
}
export const resultsMainPage = ReactRedux.connect(mapStateToProps, mapDispatchToProps)(ResultsMain);
Редуктор:
const initialState = {
user: null,
finished: false,
}
function copyAndUpdateObj(copiedObject, update) {
return Object.assign({}, copiedObject, update);
}
export default function userReducer(state = initialState, action) {
switch (action.type) {
case INSERT_USER:
return {...state, user: action.userInformation};
case SET_USER: {
let changes = {
user: action.user
}
return copyAndUpdateObj(state, changes);
}
default:
return state;
}
}
1 ответ
Ваш редуктор должен быть чем-то вроде:
function reducer(state = initialState, action) {...}
Какова бы ни была ценность this.props.userState
исходит из вашего определения initialState
в самом начале. Пожалуйста, не забудьте определить initialState
объект в вашем приложении.
Проверьте, правильно ли вы определили userState.user
в вашем начальном состоянии.