컴포넌트가 가질 수 있는 상태
state의 상태를 관리, 업데이트 할 수 있게 해줌
const[state,setState]= useState(초기값)
// state 현재 상태값
// state를 변경시키고 싶을 때 setState를 이용
setState를 이용해서 state를 업데이트 하면 렌더링이 이루어짐
어떤 컴포넌트가
1. Mount
2. Update
3. Unmount
되려면 useEffect를 사용한다.
useEffect(()=>{
작업내용
},[value])
이때 1. defendency array가 없다면 렌더링 될 때마다 실행
2. [] 빈 배열이라면 화면에 첫 렌더링 될 때만 실행
3. [value] 화면에 첫 렌더링 될 때 + value 값이 바뀔 때 실행
useEffect(()=>{
// eventlistner 구독?
return () => {
// 구독해지 하기
}
},[])
위 코드에서 useEffect 안 return 부분이 없다면 타이머는 계속해서 돌아가게 될 것이다.
이때 타이머을 종료하기 위해서 return 안에 함수를 넣어 타이머를 끝날 수 있게 했다.(unmount)
const ref =useRef(value)
//ref -> {current: value}
반환된 ref는 컴포넌트의 전 생애주기를 통해 계속해서 유지된다 ->
컴포넌트가 unMount 되지 않는다면 계속해서 렌더링이 되어도 값은 유지된다.
state 와 ref가 변화될 때
결론: 변경시 렌더링을 일으키지 않아야 하는 값 저장할 때 사용
js 의 Document.querySelector() 와 유사
예시) textbox 같은 input 요소에 focus를 줄때 사용
context는 앱 안에서 전역적으로 사용되는 데이터를 컴포넌트 사이에서 쉽게 전달할 수 있도록 해준다.
props로 일일히 데이터를 전달하지 않아도 된다.
Hook은 그냥 JavaScript 함수이지만, 두 가지 규칙을 준수해야 합니다.
반복문, 조건문, 중첩된 함수 내에서 Hook을 실행하지 마세요.
일반 JavaScript 함수에서는 Hook을 호출해서는 안 됩니다. (Hook을 호출할 수 있는 곳이 딱 한 군데 더 있습니다. 바로 직접 작성한 custom Hook 내입니다. 이것에 대해서는 나중에 알아보겠습니다.)