반응형
React Navigation
React Navigation은 React Native에서 navigation을 만드는데 독보적이다.
npm install @react-navigation/native
npx expo install react-native-screens react-native-safe-area-context
npx pod-install ios
아래 코드들을 android/app/src/main/java/<your package name>/MainActivity.java. 에 추가
create-react-native-app으로 프로젝트를 생성했으면 추가할 필요가 없다.
public class MainActivity extends ReactActivity {
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(null);
}
// ...
}
import android.os.Bundle;
Tab Navigation
bottom-tabs navigation
(https://reactnavigation.org/docs/bottom-tab-navigator)
npm install @react-navigation/bottom-tabs
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
const Tab = createBottomTabNavigator();
function MyTabs() {
return (
<Tab.Navigator>
// 모든 스크린에는 이름이 있다.또한 컴포넌트도 있다.
<Tab.Screen name="Home" component={HomeScreen} />
<Tab.Screen name="Settings" component={SettingsScreen} />
</Tab.Navigator>
);
}
import * as SplashScreen from "expo-splash-screen";
import {useFonts} from "expo-font";
import {Asset, useAssets} from "expo-asset";
import {Ionicons} from "@expo/vector-icons";
import {StatusBar} from "expo-status-bar";
import {useCallback, useEffect, useState} from "react";
import {Image, StyleSheet, Text, View} from "react-native";
import {NavigationContainer} from "@react-navigation/native";
import Tabs from "./navigation/Tabs";
export default function App() {
const [ready, setReady] = useState(false);
const [assets] = useAssets([
require("./sky.jpg"),
"https://blog.kakaocdn.net/dna/chdzI0/btqWU8aSuLk/AAAAAAAAAAAAAAAAAAAAAIfEz8Xsn-ZgISvRievor1l4l4_xl2Wkn0wbLCoBIKe-/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1751295599&allow_ip=&allow_referer=&signature=rxXSnoIA6sXC5iwvbunYznRDN6c%3D",
]);
const [fontLoaded] = useFonts(Ionicons.font);
useEffect(() => {
async function prepare() {
try {
await SplashScreen.preventAutoHideAsync();
await new Promise((resolve) => setTimeout(resolve, 3000));
} catch (e) {
console.warn(e);
} finally {
setReady(true);
}
}
prepare();
}, []);
const onLayoutRootView = useCallback(async () => {
if (ready) {
await SplashScreen.hideAsync();
}
}, [ready]);
if (!ready || !assets || !fontLoaded) {
return null;
}
return (
<NavigationContainer onReady={onLayoutRootView}>
<Tabs />
</NavigationContainer>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
},
});
Tab.Navigation Props
initialRouteName
initialRouteName은 첫번째로 렌더링될 route이다.
screenOptions
options으로는 많은 것들이 있다.
많은 것들을 option으로 만들려면 screenOption을 Tab.Navigator안에 사용해야한다.
각각의 Screen에게는 options prop을 사용하면 된다.
const Tabs = () => (
<Tab.Navigator
initialRouteName="Search"
screenOptions={{tabBarLabelStyle: {backgroundColor: "tomato"}}}
>
<Tab.Screen name="Movies" component={Movie}></Tab.Screen>
<Tab.Screen
name="Search"
component={Search}
options={{tabBarLabelStyle: {color: "green", fontSize: 20}}}
></Tab.Screen>
<Tab.Screen name="TV" component={Tv}></Tab.Screen>
</Tab.Navigator>
);
export default Tabs;
tabBarBadge
확인 안한 메세지 개수 뱃지 라고 생각하면 쉬움 문자열, boolean, null 도 반환됨
const Tabs = () => (
<Tab.Navigator initialRouteName="Search">
<Tab.Screen name="Movies" component={Movie}></Tab.Screen>
<Tab.Screen
name="Search"
component={Search}
options={{tabBarBadge: 5}}
></Tab.Screen>
<Tab.Screen name="TV" component={Tv}></Tab.Screen>
</Tab.Navigator>
);
tabBarActiveTintColor / tabBarInactiveTintColor
눌렀을때 활성화 색 / 비활성화 되었을 때 색
const Tabs = () => (
<Tab.Navigator initialRouteName="Search">
<Tab.Screen name="Movies" component={Movie}></Tab.Screen>
<Tab.Screen
name="Search"
component={Search}
options={{tabBarBadge: null, tabBarActiveTintColor: "#24aa31"}}
></Tab.Screen>
<Tab.Screen name="TV" component={Tv}></Tab.Screen>
</Tab.Navigator>
);
728x90
'React-Native > RN CLI' 카테고리의 다른 글
React-Native / Animated (0) | 2023.12.07 |
---|---|
React-Native / Refreshing, TextInput, Tab to Stack,LinearGradient, APIs , Infinite Scroll (1) | 2023.12.04 |
React-Native / Styled-components /FlatList / React-Query (0) | 2023.11.29 |
React Native / DarkMode / Icon / Stack & Tab (1) | 2023.11.28 |
React_Native CLI 설치 및 에러 대응 (0) | 2023.11.20 |