- 컴포넌트 :Component : 정해진 요소를 사용하여 만든 화면의 일부분 !!!재사용성
ex) View, Image, TouchableOpacity
- 속성 : Props: 컴포넌트에 데이터 전달
ex)numberofline, resizeMode <Text numberofline={3} >
export default function Card({content}) { : 비구조 할당. 딕셔너리로 넘겨줌.
- 상태 : State, useState : 사용할 데이터
UI = component(state)
- useEffect : 화면에 그려진 다음 가장 먼저 실행되는함수, 컴포넌트가 그려지면 처음 실행해야 하는 함수들을 모아두는곳.
useEffect(()=>{
},[]) : useEffect(함수, 빈리스트)
useState + useEffect : 비동기 기술 사용.
import React,{useState,useEffect} from 'react'; export default function MainPage() {
const [state,setState] = useState([])
useEffect(()=>{
setState(data)
},[])
return ()
}
|
state : 컴포넌트 안 상태변수 setState : 상태 변경위한 함수 |
TypeError: undefined is not an object (evaluating 'tip.map')
App.js : 진입부 (state) -> props Component (state)
-> props Component (state)
return ready ? <Loading/> : (서비스 화면)
const [state,setState] = useState([])
const [ready,setReady] = useState(true)
useEffect(()=>{ setTimeout(()=>{ setState(data) setReady(false) },1000) },[])
카테고리 기능
const [state,setState] = useState([])
const [cateState,setCateState] = useState([])
const [ready,setReady] = useState(true)
useEffect(()=>{ setTimeout(()=>{ setState(data.tip) setCateState(data.tip) setReady(false) },1000) },[])
setCateState(state.filter((d)=>{ return d.category == cate }))
<TouchableOpacity style={styles.middleButtonAll} onPress={()=>{category('전체보기')}}>
cateState.map((content,i)=>{ return (<Card content={content} key={i}/>) })
Status Bar 관리
https://reactnative.dev/docs/statusbar
expo install expo-status-bar
import { StatusBar } from 'expo-status-bar';
<StatusBar style="light" />
스택네비게이션
stack : 쌓다.
navigate : 길을 찾다. 항해하다. 다루다. : 앱에서는 페이지이동.
네비게이션 설치코드 : yarn add @react-navigation/native
네비게이션 추가 설치코드 : expo install react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context @react-native-community/masked-view
스택네비게이션 설치 : yarn add @react-navigation/stack
초기값 고려해야함.
import React from 'react';
import { createStackNavigator } from '@react-navigation/stack';
import DetailPage from '../pages/DetailPage';
import MainPage from '../pages/MainPage';
const Stack = createStackNavigator();
const StackNavigator = () =>{
return (
<Stack.Navigator
screenOptions={{
headerStyle: {
backgroundColor: "black",
borderBottomColor: "black",
shadowColor: "black",
height:100
},
headerTintColor: "#FFFFFF",
headerBackTitleVisible: false
}}
>
<Stack.Screen name="MainPage" component={MainPage}/>
<Stack.Screen name="DetailPage" component={DetailPage}/>
</Stack.Navigator>
)
}
export default StackNavigator;
|
screenOptions : 공통옵션. 설정부분 : <Stack.Screen name="MainPage" component={MainPage}/> <Stack.Screen name="DetailPage" component={DetailPage}/> |
export default function App() {
console.disableYellowBox = true;
return (
<NavigationContainer>
<StatusBar style="black" />
<StackNavigator/>
</NavigationContainer>);
}
|
|
export default function MainPage({navigation,route}) {
navigation.setOptions({ title:'나만의 꿀팁' })
return (<Card content={content} key={i} navigation={navigation}/>) onPress={()=>{navigation.navigate('DetailPage')}}> onPress={()=>{navigation.navigate('DetailPage',content)}}> DetailPage({navigation,route}) { navigation.setOptions({
title:route.params.title,
headerStyle: {
backgroundColor: '#000',
shadowColor: "#000",
},
headerTintColor: "#fff",
})
|
네비게이션 딕셔너리 : navigation 의 setOptions, navigate 라우트 딕셔너리 : {route : {param:{title:title }}} |
share -linking
expo install expo-linking
ButtonGroup
'App' 카테고리의 다른 글
[스파르타코딩클럽] 웹개발자가 듣는 앱개발 초보 강의_백엔드 (0) | 2022.12.14 |
---|---|
[스파르타코딩클럽] 웹개발자가 듣는 앱개발 초보 강의_JSX & style (0) | 2022.11.20 |