Как вызвать или передать метод с экрана B на экран A в react native?

#arrays #reactjs #react-native

#массивы #reactjs #react-native

Вопрос:

У меня есть два экрана, экран A и экран B. На каком экране B есть состояние, которое необходимо передать на экран A, и я добился этого, используя react navigation, отправив параметры через навигацию. Проблема в том, что мне нужно вызвать метод на экране A при нажатии кнопки на экране B (при нажатии кнопки она переходит на экран A), и вместе с завершением навигации мне нужно вызвать метод для выполнения setState.

Как этого добиться?

Мой метод:

  handler(){
        this.setState({ visible: !this.state.visible })
    }
  

Поэтому, когда пользователь нажимает на кнопку («Применить») на экране B, кнопка вызывает навигацию. Итак, как вызвать handler(), когда пользователь нажимает на кнопку на экране B?

Комментарии:

1. Вероятно, есть несколько способов сделать это, и трудно помочь без полного кода с обоих экранов здесь. Вы полностью закрываете экран A при переходе на экран B или используете навигатор стека, где экран A остается в памяти?

2. Используя стек, где он остается в памяти!

Ответ №1:

Я считаю, что лучший подход с использованием параметров навигации — это поставить условие в componentDidMount экрана, вызывающего ваш обработчик(), если вы обнаружите, что параметр, который вы отправили из screenB, существует. Что-то вроде этого (не уверен в точном написании):

screenB

 this.props.navigation.navigate('screenA', { paramFromB: 'param passed from Screen B'}
  

screenA

 componentDidMout(){
  if(this.props.navigation.state.params.paramFromB){
   this.handler()
  }
}
  

поэтому каждый раз, когда вы вводите на экране A, он проверяет, существует ли параметр с экрана B, а затем вызывает ваш обработчик

Комментарии:

1. componentDidMout не будет отображаться каждый раз, когда мы возвращаемся к экрану!

2. @hellodevs вы переопределяете свою кнопку возврата? Вы можете переопределить его и вместо использования navigation.navigate использовать navigation.push, чтобы вернуться к экрану A. Использование push позволяет нам выразить намерение добавить другой маршрут независимо от существующей истории навигации.

3. reactnavigation.org/docs/navigating/#going-back более подробная информация здесь, в разделе Переход к маршруту несколько раз