앱에 더 풍부한 기능을 담고 구현을 하기 위해서는 기초 지식을 알아야 합니다 :)
리액트는 어떻게 생겼을까?
import Card from '../components/Card';
Card.js에 카드부분을 분할하여 디테일페이지에서 import한다.
<View style={styles.cardContainer}>
{/* 하나의 카드 영역을 나타내는 View */}
{
tip.map((content,i)=>{
return (<Card content={content} key={i}/>)
})
}
</View>
코드에서 Card를 불러와서 사용한다.
🐰 content={content}를 통해서 데이터 전달하기
리액트는 상태(데이터)가 바뀌어야 화면이 바뀐다?
UI = component(state)
😲 사용자 화면(UI)는 컴포넌트(component)에 어떤 데이터(state)가 주입되고 변경되냐에 따라 변화된다는 의미!!
컴포넌트마다 데이터를 보유하고 관리 할 수 있습니다. 데이터라고 불러도 되지만, 리액트에서는 컴포넌트에서 보유/관리 되는 데이터를 상태라 부릅니다.
컴포넌트에서 데이터를 유지하고 관리하기 위한 유일한 방법 == 그냥 사용할 데이터!
컴포넌트 안에서 관리할 데이터
컴포넌트에 데이터를 전달하는 것!
전달 모습은 키와 벨류의 형태
<Text>
태그엔 numberOfLines이란 속성(말줄임표), <Image>
태그엔 resizeMode란 속성(이미지가 영역을 차지하는 방식)<Card image={'이미지 주소'}/>
로 키와 밸류의 형태로 속성을 부여하면 해당 컴포넌트(Card.js)에서 값을 내려받아 사용할 수 있습니다. 상위 컴포넌트에서 하위 컴포넌트로 데이터를 전달하는 방식 == 그냥 데이터 전달!
ex) StyleSheet
-> 스타일 딕셔너리
스크롤뷰에 스타일 딕셔너리 옷을 입혔다.
= 스타일 딕셔너리 값을 스크롤뷰에 전달해주는 것!
= 스타일을 태그의 속성이라고도 한다!
(함수 이름이라고 생각하기!)
useEffect(()=>{
...화면이 그려진 다음 가장 먼저 실행되야 할 코드 작성 공간
},[])
로직의 흐름
1. 메인 페이지가 화면에 그려진다.
2. useEffect로 Data.js에서 불러온 데이터를 setState
를 통해서 상태 관리를 시작한다.
useEffect(()=>{
setState(data)
},[])
3.let tip = state.tip;
를 보면 state에서 tip을 불러오고 있습니다.
4. 하지만 const [state,setState] = useState([])
을 보면 상태관리를 하기 위해 처음에 초기화 했던 useState가 줬던 상태 변수인 stated에게 빈 리스트인 []을 넘겨줬습니다.
//state = []
리스트 안에는 아무 값도 없습니다.
5. 아무것도 없는 값을 활용하였기 때문에 오류가 납니다. -> 데이터가 준비될 때까지 로딩 페이지를 보여주고 데이터가 준비되어 상태관리에 들어가면 그때 let tip = state.tip;
가 성립되지 않을까요??