반응 항법 V2: 항법 간의 차이점푸시 및 네비게이션.이네이블화
React Native는 처음이고 현재 React Native Navigation Docs를 공부하고 있습니다.궁금했어요.와의 차이는 무엇입니까?navigation.push()
그리고.navigation.navigate()
?
내가 직접 알아내려고 했지만, 그들은 똑같은 일을 해내는 것 같아...
의 메뉴얼을 참조하면, 그 차이점에 대한 설명이 있습니다.
Push 액션은 스택 상단에 루트를 추가하고 루트로 이동합니다.이는 컴포넌트가 이미 스택에 마운트되어 있는 경우 탐색이 스택의 이전 위치로 팝업된다는 점에서 다릅니다.푸시는 항상 위에 추가되므로 컴포넌트를 여러 번 장착할 수 있습니다.
Instagram을 예로 들 수 있습니다.
사용자의 프로파일로 이동하는 것을 고려해 보십시오.그런 다음 사용자의 팔로워를 확인하고 프로필로 이동할 수 있습니다.에서만 동일한 액션을 수행하는 경우navigate
액션 팔로워 리스트 화면에서 사용자의 프로파일을 클릭하면 이전 프로파일로 이동합니다.단,push
스택에 새 화면이 푸시되고 올바른 프로파일이 표시됩니다.이렇게 하면goBack
첫 화면으로 이동합니다.
여기 마지막 블로그 투고에 따르면 v1의 경우:
navigate(routeName) and push(routeName) were very similar: every time you called navigate(routeName) it would push a new route to the stack.
v2의 경우:
Now navigate(routeName) will first try to find an existing instance of the route and jump to that if it exists, otherwise it will push the route to the stack.
navigate > 페이지인스턴스(존재하는 경우)로 이동합니다.
push > 새로운 인스턴스가 이미 존재하는 경우에도 push한다.
질문에 대답할 수 있을 것 같아요.
홈페이지 1페이지 2페이지 3페이지입니다.
"home"은 "initialRouteName"이고 "page1"과 "page2"는 하위 페이지입니다.
홈에서 시작하여 page1(또는 page1)을 누르면 페이지 스택은 다음과 같습니다.
(2) 페이지1
(1) 자택
페이지2를 세 번 누르면 스택은
(5) 페이지2
(4) 페이지2
(3) 페이지2
(2) 페이지1
(1) 자택
이제 집에 가고 싶어, 할 수 있어요.
1 팝을 4회 또는 직접 팝(4)
2 페이지 1을 탐색한 후 한 번 팝합니다.
3 pop To Top 1회
페이지 스택에 page1이 없는 경우 스택의 맨 위에 push, parames 페이지가 표시되고 페이지가 표시되는 것과 동일하게 동작합니다.
페이지 스택에 페이지 1이 있을 때, 탐색 기능은 스택의 맨 위에 가장 가까운 페이지 1로 점프하고 페이지 1 위에 다른 페이지를 팝하는 것입니다.
예를 들어 다음과 같은 페이지 스택이 있습니다.
(7) 페이지2
(6) 페이지2
(5) 페이지2
(4) 페이지1
(3) 페이지 1
(2) 페이지1
(1) 자택
집으로 돌아가려면 먼저 1페이지를 탐색한 후 3번 팝업을 해야 합니다.
현재 페이지가 페이지 1이고 페이지 1로 이동하면 아무것도 표시되지 않음을 유의하십시오.
일어났다.
여기 제가 작성한 테스트 코드가 있습니다. App.js로 복사해 주세요.
import * as React from 'react';
import { Button, View,Text } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
function HomeScreen({ navigation }) {
return (
<View style={{}}>
<Button
title="navigate to page1"
onPress={() => navigation.navigate('page1',{"pageName":"page1"})}
/>
<Button
title="push to page1"
onPress={() => navigation.push('page1',{"pageName":"page1"})}
/>
</View>
);
}
function Page({route, navigation }) {
return (
<View style={{}}>
<Text>{`current page is ${route.name}`}</Text>
<Button
title="navigate to Page1"
onPress={() => navigation.navigate('page1')}
/>
<Button
title="push Page1"
onPress={() => navigation.push('page1')}
/>
<Button
title="navigation to Page2"
onPress={() => navigation.push('page2')}
/>
<Button
title="push Page2"
onPress={() => navigation.push('page2')}
/>
<Button
title="Go to HomeScreen"
onPress={() => navigation.navigate('Home')}
/>
<Button
title="pop"
onPress={() => navigation.pop()}
/>
<Button
title="popToTop"
onPress={() => navigation.popToTop()}
/>
</View>
);
}
const Stack = createStackNavigator();
function MyStack() {
return (
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="page1" component={Page} />
<Stack.Screen name="page2" component={Page} />
</Stack.Navigator>
);
}
export default function App() {
return (
<NavigationContainer>
<MyStack />
</NavigationContainer>
);
}
그것이 당신에게 도움이 되기를 바랍니다.
짧고 심플하게 하고 싶었다.
Navigation.navigate
는, 만, 「 상태로 합니다」라고 하는 것은, 「」( 「오래된 상태입니다.Navigation.push
는 화면이 이전에 방문되었는지, 스택에서 사용할 수 있는지 확인하지 않고 새 화면으로 이동합니다.
언급URL : https://stackoverflow.com/questions/51090135/react-navigation-v2-difference-between-navigation-push-and-navigation-navigate
'programing' 카테고리의 다른 글
반응 경고 최대 업데이트 깊이를 초과했습니다. (0) | 2023.03.10 |
---|---|
npm과 함께 "Cannot read dependencies" 오류가 발생하였습니다. (0) | 2023.03.10 |
유지 방법: 버튼 클릭 후 액티브한 css 스타일 (0) | 2023.03.10 |
JSONDecodeError: 예상, 딜리미터를 제공하는 유효한 JSON (0) | 2023.03.10 |
WooCommerce에서 카트에 추가하기 전에 카트를 비웁니다. (0) | 2023.03.10 |