Javascript/React-Native
[RN] 상태 관리 해보자 : useState, useEffect
insub4067
2022. 7. 31. 02:18
useEffect란 생명주기와 연관이 있다
view가 Load 되었을때 호출될거나,
State의 값이 변경 되었을때 호출 되거나,
view가 Disappear할때 호출되기도 한다
일단 코드를 한번 읽어 보자
const [state, setState] = useState([])
이런식으로 사용할 state값을 init 한다
하지만 안에 값이 전혀 안들어 있다
값을 넣을때면 setState를 호출 하면 된다
[변수, 함수] 뒤에껀 callback이다
setState(data.tip)
이 함수 호출을 통해 data에 값을 넣어주고있다
그리고 TouchableOpactiy를 통해 click 된 경우
category라는 선언형 함수를 실행한다
cate를 매개변수로 받고 있으면
cate: String을 setCateState를 통해 cateState라는 상태 변수에 값을 넣어주고있다
그러면 무슨 일이 일어날까?
setCateState가 호출되었으니
시스템은 자동적으로 view를 다시 그려준다 개꿀...
Swift Combine의 ObservedObject를 너무나도 쉽게 구현하는 것이다
import React, { useState, useEffect } from 'react';
import data from '../data.json';
export default function MainPage() {
const [state, setState] = useState([])
const [cateState, setCateState] = useState([])
const [ready, setReady] = useState(true)
useEffect(() => {
setTimeout(() => {
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
}))
}
}
return ready ? <Loading /> : (
<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={() => { category('꿀팁 찜') }}><Text style={styles.middleButtonText}>꿀팁 찜</Text></TouchableOpacity>
</ScrollView>
)
}