Состояние Redux заполнено, но я получаю состояние ошибки NULL - PullRequest
0 голосов
/ 25 мая 2018

В настоящее время я работаю над проектом, который включает в себя зарегистрированных пользователей.В моем избыточном состоянии у меня есть пользователь, который не является нулевым объектом.Но когда я пытаюсь получить роль из этого пользовательского объекта, я неожиданно получаю сообщение об ошибке «состояние равно нулю»

this.props.userState.user 

возвращает пользовательский объект с атрибутом роли.

this.props.userState.user.role 

выдает ошибку «Ошибка типа: this.props.userState.user имеет значение NULL»

edit: ниже приведен весь код всего файла.

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 Ответ

0 голосов
/ 25 мая 2018

Ваш редуктор должен быть чем-то в этом роде:

function reducer(state = initialState, action) {...}

Независимо от того, какое значение this.props.userState происходит из вашего определения initialState в самом начале.Убедитесь, что вы определили объект initialState в своем приложении.

Проверьте, правильно ли вы определили userState.user в исходном состоянии.

...