#react-native #react-navigation
#react-native #react-навигация
Вопрос:
У меня есть настройка навигатора следующим образом: (с использованием react-navigation 5.x)
<BottomTabNavigator>
<DashboardNavigator>
<MainScreen />
</DashboardNavigator>
<ItemNavigator>
<ItemListScreen />
<ItemDetailScreen />
</ItemNavigator>
</BottomTabNavigator>
Я хочу перейти от MainScreen
к ItemDetailScreen
, но я хочу, чтобы кнопка возврата заголовка вела к ItemListScreen
. Другими словами, я хочу MainScreen
, чтобы меня заменил стек с [ItemListScreen, ItemDetailScreen]
помощью .
Я попытался использовать
navigation.navigate(
'ItemNavigator',
{
screen: 'ItemListScreen',
params: {
screen: 'ItemDetailScreen',
params: {id: itemId}
}
}
)
но это только заставляет меня ItemListScreen
обходиться без ItemDetailScreen
. Как мне это сделать? Перезапуск также не помог
Комментарии:
1. У меня точно такая же проблема. Также читайте об отправке действия сброса, которое я тоже не смог заставить работать. Однако вызов
navigate()
дважды подряд, сначала дляItemListScreen
, а затем дляItemDetailScreen
, похоже, создает правильный стек. Хотя я не слишком доволен, делая это таким образом, и надеюсь на лучшее решение…
Ответ №1:
Вы хотите использовать CommonActions
Вот код для потомков:
import { CommonActions } from '@react-navigation/native';
navigation.dispatch(
CommonActions.reset({
index: 1,
routes: [
{ name: 'Home' },
{
name: 'Profile',
params: { user: 'jane' },
},
],
})
);
В вашем случае просто замените Home на ItemListScreen, а Profile на ItemDetailScreen .
Ответ №2:
Я могу предоставить вам более эффективный способ, который вызывается react-native-navigation
, если вы хотите перемещаться между двумя экранами, тогда вот код
class App extends Component {
constructor(props) {
super(props);
//Setting Up The States
var data;
this.state = {
page: 'home',
data: {},
};
}
//render method
render() {
//return method
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="Screen1" component={Screen}/>
<Stack.Screen name="Screen2" component={Screen2}/>
</Stack.Navigator>
</NavigationContainer>
);
}
}
Это компонент экрана
const Screen = ({ navigator, router }) => (
<Text>This Is Screen 1</Text>
<Button title="Go To Screen 2" onPress={() => {
navigator.push('Screen2')
}}/>
)
Это компонент Screen 2
const Screen2 = ({ navigator, router }) => (
<Text>This Is Screen 2</Text>
<Button title="Go To Screen 1" onPress={() => {
navigator.pop()
}}/>
)
и это ссылка на React Native Navigation