Состояние 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 в вашем начальном состоянии.

Другие вопросы по тегам