react의 Hook API로 프로젝트를 진행하면서 대표적으로 가장 많이 사용하는 Hook을 정리해보려 한다.
state
는 초기화 된 인자(initialState
)의 값과같다.💡 쉽게 말해 아래 예시 코드와 같이 state 라는 이름으로 state를 선언할 때, initialState로 초기화 한다는 말이다.
const [state, setState] = useState(initialState);
setState
함수는 state
를 생신할 때 사용된다. 새 state의 값을 받아 컴포넌트 리렌더링 큐에 등록한다.💡 다음 리렌더링 시에 "useState"를 통해 반환받은 첫 번째 값은 항상 갱신된 최신 state가 된다.
setState(newState)
아래 예제는 firstState
라는 state hook을 1로 선언 후 setFirstState
를 사용해 2로 state의 값을 변경한 예시이다.
import React, {useState} from 'react';
export default function StateEx() {
const [firstState, setFirstState] = useState(1);
.
.
.
const setStateFunc = () => {
setFirstState(2);
}
}
명령형
또는 어떤 effect
를 발생하는 함수를 인자로 받는다.useEffect
에 전달된 함수는 렌더링이 완료
된 후에 수행한다.특정 값이 변경되었을 때만
실행되게 할 수도 있다.class component
의 componentDidMount
, componentDidUpdate
, componentWillUnmount
의 동작을 수행할 수 있다.💡 그러나 class component의 componentDidMount와 componentDidUpdate와는 다르게
"useEffect" 로 전달된 함수는 지연 이벤트 동안에 레이아웃 배치와 렌더링을 완료한 이후에 실행된다.
mount
하거나 unmount
할 때 한 번만 실행하고 싶다면 useEffect의 두 번재 인자로 빈 배열([]
)을 전달하면 된다.특정 상태가 변경
했을 시 effect를 수행
하고 싶다면 useEffect의 두 번째 인자
에 해당 값을 넣어 해당 값이 변경됐을 시 effect를 수행할 수 있다.아래 예제는 두 가지 useEffect로 componentDidMount와 componentDidUpdate를 보여주는 예시이다.
import React, {useState, useEffect} from 'react';
import {View, Text, TouchableOpacity} from 'react-native;
export default function EffectEx() {
const [firstState, setFirstState] = useState(false);
useEffect(() => {
console.log('첫 렌더링!');
}, []);
useEffect(() => {
console.log('firstState 값 변경 감지!');
}, [firstState]);
return (
<View>
<TouchableOpacity onPress=(() => setFirstState(!firstState)>
<Text>Click!</Text>
</TouchableOpacity>
</View>
);
}
첫 렌더링 시 console log의 출력은 '첫 렌더링!'
이 호출될 것이다. 그런 후 'Click' 버튼을 누르면 firstState의 값이 변경돼
두 번째 useEffect가 실행되며, 'firstState 값 변경 감지!'
의 로그가 출력될 것이다.
React.createContext
에서 반환된 값)을 받아 그 context의 현재 값을 반환한다.<Context.Provider>
의 value
prop
에 의해 결정된다.<Context.Provider>
가 갱신되면 useConext
를 사용하고 있는 컴포넌트 자체에서부터 다시 렌더링 된다.useContext
를 호출한 컴포넌트는 context 값이 변경
되면 항상 리렌더링 된다.💡 useContext(MyContext) 는 class component의
static contextType = MyContext 또는 <MyContext.Consumer>와 같다.
💡 useContext(MyContext)는 context를 읽고 context의 변경을 구독하는 것만 가능하다.
참조 react 공식 doc