Я использую redux, и я хочу отобразить свой основной ящик в зависимости от того, вошел ли пользователь в систему или нет. У меня есть класс init, который проверяет это и делает это соответственно.
Я отправлю код и объясню в конце:
Init.js
const mapStateToProps = (userReducer) => {
return {
...userReducer,
}
}
const mapDispatchToProps = (dispatch) => {
return {
dispatch,
getCurrentUser: () => {
dispatch(getCurrentUser())
}
}
}
class Init extends Component {
constructor(props) {
super(props);
this.props.getCurrentUser()
console.info("TEST>>")
console.info(this.props)
}
chooseInitialRoute() {
const { navigation, user } = this.props;
if (user) {
navigation.dispatch(StackActions.reset(
{ index: 0, key: null, actions: [NavigationActions.navigate({ routeName: 'LoggedDrawer' })] }
))
} else {
navigation.dispatch(StackActions.reset(
{ index: 0, key: null, actions: [NavigationActions.navigate({ routeName: 'UnloggedDrawer' })] }
))
}
}
user_actions.js
export function getCurrentUser() {
return (dispatch) => {
Parse.User.currentAsync().then(function (user) {
if (user) {
dispatch({ type: 'GET_USER', payload: { user } })
} else {
dispatch({ type: 'GET_USER_REJECTED', payload: error })
}
})
}
}
console.info (this.props) возвращает undefined, если вызывается внутри конструктора (то же самое происходит, когда я делаю console.info (реквизиты). Но если я вызываю его внутри render (), я получаю реквизиты правильно (это означает, что я получаю правильный объект пользователя с сервера синтаксического анализа).
Есть ли способ обновить реквизиты перед методом render ()? Я хочу получить "обновленный" реквизит на chooseInitialRoute ()
Заранее спасибо. Если потребуется больше кода, дайте мне знать.





Если console.info(props) не определен в конструкторе, это означает, что компонент позже получит реквизиты через componentWillReceiveProps, и я не знаю, где вы вызываете InitialRoute, но вы можете подумать о том, чтобы вместо этого поместить его в функцию жизненного цикла:
componentWillReceiveProps(props) {
const { navigation, user } = props;
if (user) {
navigation.dispatch(StackActions.reset(
{ index: 0, key: null, actions: [NavigationActions.navigate({ routeName: 'LoggedDrawer' })] }
))
} else {
navigation.dispatch(StackActions.reset(
{ index: 0, key: null, actions: [NavigationActions.navigate({ routeName: 'UnloggedDrawer' })] }
))
}
}
Обратите внимание: если ваши реквизиты не определены в конструкторе, то ваш компонент может отрисовываться несколько раз, прежде чем ваш компонент, наконец, получит реквизиты через componentWillReceiveProps.
Можете ли вы показать весь код init.js?