내배캠 TIL 2022.01.09
원격 브랜치 트래킹하는 로컬 브랜치 같은 이름으로 가져오기
$ git checkout -b [생성할 브랜치 명] [원격 브랜치 명]
기능 가져올 때 navigation을 구조 분해 할당하고 그 안의 메서드들을 또 구조분해 할당한다. 총 2번 구조 분해 할당
const MainPage = ({ navigation: { goBack, reset, navigate, setOptions } }) => {
return (
<View>
</View>
);
};
<TouchableOpacity onPress={() => navigate('MainPage')}>
<Text>메인 페이지로</Text>
</TouchableOpacity>
<TouchableOpacity
onPress={() =>
reset({
index: 1,
routes: [{ name: 'LoginPage' }, { name: 'EditPage' }],
})
}
>
<Text>Reset Navigation</Text>
</TouchableOpacity>
<TouchableOpacity onPress={() => goBack()}>
<Text>뒤로가기</Text>
</TouchableOpacity>
<TouchableOpacity
onPress={() =>
setOptions({
title: '변경된 제목',
})
}
>
<Text>제목 변경 버튼</Text>
</TouchableOpacity>
페이지 하나 당 속성 부여하기 (Screen에 넣어준다)
<Stack.Screen
options={{
headerTintColor: '#24F8DE',
}}
name="수정 페이지"
component={EditPage}
/>
시작할 첫 페이지 설정
전체 속성 부여하기 (Navigator에 넣어준다)
<Stack.Navigator
initialRouteName="로그인"
screenOptions={{
title: '제목 변경',
}}
sceneContainerStyle={{
backgroundColor: MAIN_COLOR,
}}
>
Stack 불러와서 쓰는 법
import { createNativeStackNavigator } from '@react-navigation/native-stack';
const Stack = createNativeStackNavigator();
const Stacks = () => {
return (
<Stack.Navigator>
<Stack.Screen name="회원가입" component={SignupPage} />
</Stack.Navigator>
);
};
export default Stacks;
Tab도 사용방법 다 똑같은데 처음 불러오는 코드
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
const Tab = createBottomTabNavigator();
const Tabs = () => {
return (
<Tab.Navigator >
<Tab.Screen name="메인 페이지" component={MainPage} />
</Tab.Navigator>
);
};
export default Tabs;
클릭 시 bottom tab 버튼들 강조해주고 싶어서 상태를 뭘로 주면 되나 구글링
https://github.com/react-navigation/react-navigation/issues/2381
How to used different icon when tabbaricon selected and unselected · Issue #2381 · react-navigation/react-navigation
How to used different icon when tabbaricon selected and unselected。 which API ? Current Behavior Expected Behavior Your Environment software version react-navigation react-native node npm or yarn
github.com
focused 이용하면 된대
<Tab.Screen
options={{
tabBarLabel: '',
tabBarIcon: ({ focused }) =>
focused ? (
<Entypo name="home" size={25} color="black" />
) : (
<Entypo name="home" size={25} color="lightgrey" />
),
}}
name="메인 페이지"
component={MainPage}
/>
상현님이 index에서 전체를 다 임포트해서 한꺼번에 export하는 방식을 이용하자고 하셨는데
내가 나름대로 한게 맞는지 모르겠다.
디렉토리 파일 export 하기 (index.js 사용)
export 문은 JavaScript 모듈에서 함수, 객체, 원시 값을 내보낼 때 사용합니다. 내보낸 값은 다른 프로그램에서 import 문으로 가져가 사용할 수 있습니다.
leedr0730.medium.com
보안과 보기에 깔끔하라고 쓰는 방식인듯 하다.
내가 따라한 코드
import SignupPage from './SignupPage';
import MyPage from './MyPage';
import MainPage from './MainPage';
import LoginPage from './LoginPage';
import EditPage from './EditPage';
export { SignupPage, MyPage, MainPage, LoginPage, EditPage };
내가 하고 싶은 것은
로그인, 회원가입에서 빠져나와서 메인 페이지로 가면 로그아웃을 하지 않는 한 뒤로 가기를 해도 로그인, 회원가입 페이지로 안 가졌으면 좋겠다. 그전 페이지 기록을 reset 하고 싶은데, tab으로 넘어가면서 stack의 기록을 reset하는 방법을 모르겟다. 구글링 해봤는데 코드를 이렇게 저렇게 쓰라는데 봐도 잘 이해가 안된다. 튜터님한테 물어봐야지.
https://www.reactnativeschool.com/reset-stack-inside-tab-after-leaving-tab
React Navigation v5: Reset Stack Inside Tab After Leaving Tab
Reset a stack navigator to the initial screen when leaving that tab. Uses React Navigation v5
www.reactnativeschool.com
이 코드가 내가 하려는 방식과 비슷 한것 같은데 이해가 잘 안된다.