React-встроенный навигатор стека возврат к предыдущему экрану с тем же начальным именем

#react-native #react-navigation

#react-встроенный #реагировать-навигация

Вопрос:

Я разрабатываю приложение React Native и использую stacknavigator от react navigation, и вот мой сценарий:

  • У меня есть компонент A в качестве stacknavigator, который содержит экран B (и другие).
  • Нажав на кнопку в A, перейдите к B
  • Нажав на кнопку в B, перейдите к B (на этот раз с новыми данными)
  • Нажав на кнопку возврата по умолчанию второго B, перейдите к A. И это моя проблема, поскольку я хочу вернуться к первому B, проверьте мою конфигурацию stacknavigator и поправьте меня, если я пропустил дополнительную конфигурацию, спасибо.
 <AppStack.Navigator
    initialRouteName="HOME"
    screenOptions={stackStyle}>
    <AppStack.Screen
        name="HOME"
        component={A}
    />
    <AppStack.Screen
        name="B"
        component={B}
    />
....
 

В пределах B:

 const {navigation} = this.props;
navigation.navigate('B', {new data for second B});
 

РЕДАКТИРОВАТЬ: Забыл упомянуть, что первый B запускает второй B из webview

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

1. Могу ли я увидеть, что вы делаете, когда нажимаете на кнопку B. Вы пытаетесь сделать что-то вроде navigation.navigate(‘B’) с экрана B?

2. Точно @HichamELBSI

3. На мой взгляд, вам не следует этого делать. Вы должны повторно отобразить экран с обновлением состояния или просто компонентом, который вам нужен для этого экрана.

4. Итак, какой тип проблемы вызывается с того же экрана? это хорошая практика, чтобы не делать?

5. navigation.replace(‘screenA’)

Ответ №1:

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

 navigation.navigate('B', { ... })
 

Автор: :

 navigation.push('B', { ... })
 

При использовании вы push создаете новый маршрут, поэтому, когда вы вернетесь с этого нового маршрута, он перейдет к предыдущему. navigate попытается перейти к существующему маршруту, поэтому в вашем случае: маршрут B уже существует на самом деле.

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

1. Это имеет смысл, попробую и вернусь к вам. Кстати, все еще путают с «вы не должны этого делать». потому что в моем случае использования, если я изменил состояние, содержимое веб-представления изменится, но пользователь не сможет вернуться к первому содержимому веб-представления. Вы поняли мою точку зрения?

2. TBH это зависит от вашего варианта использования. Переход от B к B может быть полезен, например, если вы хотите перемещаться между профилями пользователей или между двумя страницами сведений. Но я говорил о классическом варианте использования, при котором вы переходите с пустой страницы B на страницу с заполненными данными B.

3. Спасибо, я мог бы предложить решение, которое сочетает в себе оба (состояние и нажатие). Опять же, у меня есть особый вариант использования, как я уже упоминал, я должен обновить содержимое webview на том же экране B.