참조: [https://reactnavigation.org/docs/en/navigation-prop.html#docsNav]
this.props.navigation
import { withNavigation } from 'react-navigation';
class SubComp extends React.Component {}
export default withNavigation(SubComp); // SubComp로 navigation props를 주입해줌!🔥
navigate - go to another screen, figures out the action it needs to take to do it
goBack - close active screen and move back in the stack
addListener - subscribe to updates to navigation lifecycle
isFocused - function that returns true if the screen is focused and false otherwise.
state - current state/routes
setParams - make changes to route's params
getParam - get a specific param with fallback
dispatch - send an action to router
dangerouslyGetParent - function that returns the parent navigator, if any
navigate가 동작하지 않는 경우
1. navigate('RouteName'); 로 다른 stack으로 이동할 때 Stack Navigator에 정의되지 않을 경우 아무일도 일어나지 않는다.
- If we call this.props.navigation.navigate with a route name that we haven't defined on a stack navigator, nothing will happen. Said another way, we can only navigate to routes that have been defined on our stack navigator — we cannot navigate to an arbitrary component.
- navigate는 현재 stack에 이동하려하는 routeName이 존재하는지 체크하고 없을 경우에만 stack에 routeName을 추가한다면, push는 체크하지 않고, 바로 추가 한다.
2. 이미 해당 stack에 위치할 경우 동작하지 않는다.
// Other code for HomeScreen here...
class DetailsScreen extends React.Component {
render() {
return (
<View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
<Text>Details Screen</Text>
</View>
);
}
}
const AppNavigator = createStackNavigator( // 👈 react-navigation이 제공해주는 api
{ // 첫 번째 인자로 route 경로를 설정.
Home: HomeScreen, // Route Name: Route Component (Route Name은 크게 작명 규칙 없지만 react-navigation에서는 파스칼표기법을 추천한다.
Details: DetailsScreen
},
{ // 두 번째 인자로 Stack Navigator에 대한 Option을 설정할 수 있다.
initialRouteName: "Home"
}
);
/* 👇route name관련 react-navigation측 주장.
The casing of the route name doesn't matter -- you can use lowercase home or capitalized Home, it's up to you. We prefer capitalizing our route names.
*/
잘보고갑니다 덕분에 쉽게 이해가 됏네요 ^^