최상위에서만 hooks를 호출해야한다. 그리고 반복문, 조건문, 중첩된 함수 내에서 실행할 수 없다.
react 함수 컴포넌트 내에서만 hooks를 호출해야 한다.
const [state, setState] = useState( state초기값 );
// 아주 간단한 버전의 useState
const useState = (init = undefined) => {
let value = init
const getter = () => value // 클로저
const setter = next => (value = next) // 클로저
return [getter, setter]
}
const [state, setState] = useState('클로저')
state()
setState("어려워!")
state()
//state는 getter, setState는 setter 역할로 useState가 반환하는 [getter, setter]를 비구조화 할당 해준 것임.
const [state, setState] = useState({
color: red,
name: "",
isActive: true,
}) // 좋지 않은 예
함수 컴포넌트 내에서 여러 side effects를 수행할 수 있게 해주는 훅.(componentDidMount, comcponentDidUpdate, componentWillUnmount 이 셋을 하나의 api로 통합)
코드 예시
useEffect(() => {
console.log("componentDidUpdate")
})
useEffect(() => {
console.log("componentDidMount")
return () => console.log("componentWillUnmount")
}, [])
useEffect(() => {
console.log("componentDidMount")
console.log("componentDidUpdate") // + shouldComponentUpdate
return () => console.log("???")
}, [state])
//의존배열 내에 값이 있으면 그 값을 참조하여 값이 변경 될 때마다 useEffect가 실행이 된다.
// 두번째에서 compDidMount에 조건문을 걸어주면 compDidUpdate만 실행시켜줄 수 있다.
=> 나중에 공부하기