#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.