
3주차 수업을 듣고 아무래도 가장 이해가 안되는 것이 useState 였는데요
state는 각 컴포넌트가 컴포넌트 내에 가지고 있는 데이터로 이해했고
props는 부모 컴포넌트로부터 전달 받은 데이터라고 이해했습니다.
useState는 다음과 같이 사용하게 되는데
const [value, setValue] = useState(0);
의미를 생각해보자면
useState를 이용하여
1) value라는 상태 변수를 선언하고
2) setValue라고 하는 상태변수를 설정할 수 있는 함수를 선언하고
3) state 초기값을 0으로 설정한다
고 이해하였습니다.
제가 궁금한 점은
이 useState로 정의한 value는 어떤 컴포넌트의 state인가요?
예를 들어 강의에서의 코드를 보면
import React, { useState, useEffect } from "react";
import {
StyleSheet,
Text,
View,
Image,
TouchableOpacity,
ScrollView,
} from "react-native";
const main =
"https://storage.googleapis.com/sparta-image.appspot.com/lecture/main.png";
import data from "../data.json";
import Card from "../components/Card";
import Loading from "../components/Loading";
import { StatusBar } from "expo-status-bar";
export default function MainPage({ navigation, route }) {
//useState 사용법
//[state,setState] 에서 state는 이 컴포넌트에서 관리될 상태 데이터를 담고 있는 변수
//setState는 state를 변경시킬때 사용해야하는 함수
//모두 다 useState가 선물해줌
//useState()안에 전달되는 값은 state 초기값
const [state, setState] = useState([]);
const [cateState, setCateState] = useState([]);
//하단의 return 문이 실행되어 화면이 그려진다음 실행되는 useEffect 함수
//내부에서 data.json으로 부터 가져온 데이터를 state 상태에 담고 있음
const [ready, setReady] = useState(true);
useEffect(() => {
//뒤의 1000 숫자는 1초를 뜻함
//1초 뒤에 실행되는 코드들이 담겨 있는 함수
setTimeout(() => {
//헤더의 타이틀 변경
navigation.setOptions({
title: "나만의 꿀팁",
});
setState(data.tip);
setCateState(data.tip);
setReady(false);
}, 1000);
}, []);
const category = (cate) => {
if (cate == "전체보기") {
//전체보기면 원래 꿀팁 데이터를 담고 있는 상태값으로 다시 초기화
setCateState(state);
} else {
setCateState(
state.filter((d) => {
return d.category == cate;
})
);
}
};
//data.json 데이터는 state에 담기므로 상태에서 꺼내옴
// let tip = state.tip;
let todayWeather = 10 + 17;
let todayCondition = "흐림";
//return 구문 밖에서는 슬래시 두개 방식으로 주석
return ready ? (
<Loading />
) : (
/*
return 구문 안에서는 {슬래시 + * 방식으로 주석
*/
<ScrollView style={styles.container}>
<StatusBar style="light" />
{/* <Text style={styles.title}>나만의 꿀팁</Text> */}
<Text style={styles.weather}>
오늘의 날씨: {todayWeather + "°C " + todayCondition}{" "}
</Text>
<TouchableOpacity
style={styles.introduction}
onPress={() => {
navigation.navigate("AboutPage", { title: "소개 페이지" });
}}
>
<Text style={styles.introText}>소개 페이지</Text>
</TouchableOpacity>
<Image style={styles.mainImage} source={{ uri: main }} />
<ScrollView
style={styles.middleContainer}
horizontal
indicatorStyle={"white"}
>
<TouchableOpacity
style={styles.middleButtonAll}
onPress={() => {
category("전체보기");
}}
>
<Text style={styles.middleButtonTextAll}>전체보기</Text>
</TouchableOpacity>
<TouchableOpacity
style={styles.middleButton01}
onPress={() => {
category("생활");
}}
>
<Text style={styles.middleButtonText}>생활</Text>
</TouchableOpacity>
<TouchableOpacity
style={styles.middleButton02}
onPress={() => {
category("재테크");
}}
>
<Text style={styles.middleButtonText}>재테크</Text>
</TouchableOpacity>
<TouchableOpacity
style={styles.middleButton03}
onPress={() => {
category("반려견");
}}
>
<Text style={styles.middleButtonText}>반려견</Text>
</TouchableOpacity>
<TouchableOpacity
style={styles.middleButton04}
onPress={() => {
navigation.navigate("LikePage", { title: "꿀팁 찜" });
}}
>
<Text style={styles.middleButtonText}>꿀팁 찜</Text>
</TouchableOpacity>
</ScrollView>
<View style={styles.cardContainer}>
{/* 하나의 카드 영역을 나타내는 View */}
{cateState.map((content, i) => {
return <Card content={content} key={i} navigation={navigation} />;
})}
</View>
</ScrollView>
);
}
MainPage() 내부에서 useEffect로 state와 cateState를 정의하였는데
그럼 이 두 상태변수는 MainPage라는 컴포넌트의 상태변수라고 생각하면 될까요??
