Как получить доступ к объекту навигации в react-native

Я новичок в реакции-навигации, и я пытаюсь реализовать простую навигацию. Проблема, с которой я столкнулся, заключается в том, что я не могу найти способ передать объект «навигации» на экран желаний. Я пробовал использовать withNavigation и т.д .. он все еще бросает "this.props.navigation" не определено !. Из того, что я прочитал, если я объявляю экран в rootStack, объект навигации автоматически передается компоненту, верно?

так вот мой rootStack

/* ROUTING RULES */
const RootStack = createStackNavigator(
    {
      Main: Main,
      ChatBox: ChatBox,
    },
    {
      initialRouteName: 'Main',
      
     }
    

   
  );
/* End */

и это метод, который я использую для навигации по экрану чата

()=>this.props.navigation.navigate('ChatBox', {
                avatarUrl: matches.avatarUrl,
                name: matches.name,
              })

Я заметил, что с моего главного экрана я мог получить доступ к навигации без каких-либо проблем, но когда я попытался запустить простой console.info на моем экране chatBox

  constructor(props){
   super()
  console.info(this.props.navigation)
  
  }

Я получаю «TypeError: undefined не является объектом (оценка'_this.props.navigation ')»

Может кто-нибудь помочь мне разгадать эту загадку ?? Благодарность :)

Как вы переходите на экран ChatBox? вы можете поделиться своим фрагментом кода для этого?

DNA.h 14.10.2018 10:24

@ DNA.h да, конечно .. Я добавил недостающий код, пожалуйста, посмотрите

Micheal Muller 14.10.2018 10:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
2
409
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В вашем конструкторе это не нужно для доступа к реквизитам. Попробуй это

constructor(props){
    super(props);
    console.info(props.navigation.getParam('avatarUrl');
}

Обновлено: вам тоже нужно было передать реквизит в супер! не отправка может вызвать некоторые ошибки.

Он по-прежнему выдает сообщение «Инвариантное нарушение: недопустимый тип элемента, ожидается строка (для встроенных компонентов) или класс / функция ....»

Micheal Muller 14.10.2018 11:00

Я очень подозрительно отношусь ко второму аргументу. вероятно, это связано с другой частью кода. вы можете поделиться своим кодом?

DNA.h 14.10.2018 12:22
Ответ принят как подходящий

Попробуйте использовать методы жизненного цикла вместо конструктора

componentDidMount() {
    console.info(this.props.navigation)
}

Привет, Тарек, твое решение работает! хм, вы можете дать объяснение: D

Micheal Muller 16.10.2018 18:25

потому что this.props настраивается самим React как часть работы, которую он выполняет под капотом, поэтому использование его внутри методов жизненного цикла - это не только лучшая практика, но и имеет смысл, первый метод жизненного цикла срабатывает, когда реакция становится готовой, конструктор предназначен только для установки свойств класса, таких как состояние, и поскольку props - это задание React для установки, попытка использовать его из конструктора не является хорошей идеей, потому что есть вероятность, что React еще не готов и не получил возможности сделать его работа под капотом

Tareq El-Masri 16.10.2018 19:08

Большое спасибо за помощь (flex): D

Micheal Muller 16.10.2018 19:15

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