this.props.propsName выбрасывает неопределенную ошибку

В моем приложении реакции на родной 0.59 реквизиты доступны следующим образом, когда пользователь нажимает:

let obj = JSON.stringify({
        sender_id: this.props.user.id,
        event_id: this.props.eventId,
      });

Поскольку этот компонент вызывается путем передачи двух реквизитов:

this.props.navigation.navigate("Chat", {eventId: id, user: this.state.user});

Но это выдает ошибку:

TypeError: undefined is not an object (evaluating 'this.props.user.id')

Это работает, когда я меняю способ ссылки на реквизит:

    sender_id: this.props.navigation.state.params.user.id,
    event_id: this.props.navigation.state.params.eventId,

Но реагирующий нативный документ использует this.props.props_name для доступа к реквизиту для компонента. Который правильный?

Всего 2 ответа


Второй вариант правильный, так как вы передаете параметры навигации, которые доступны только через состояние навигации. Следующим образом:

sender_id: this.props.navigation.state.params.user.id, 
event_id: this.props.navigation.state.params.eventId

Или вы можете использовать функцию getParam, чтобы передать ключ с двумя аргументами в качестве значения по умолчанию для параметра.

sender_id: this.props.navigation.getParam('user', {id: undefined}).id, 
event_id: this.props.navigation.getParam('eventId', undefined)

Для более подробной информации посетите реагировать навигации


Взгляните на веб-сайт реакции-навигации https://reactnavigation.org/docs/en/params.html.

кажется, что вы должны сделать что-то вроде этого:

const { navigation } = this.props;
const eventId= navigation.getParam('eventId', 'NO-ID');
const user= navigation.getParam('user', 'some default value');

Я надеюсь, что это поможет вам.


Есть идеи?

10000