오늘은 useState와 useRef, useEffect에 대한 내용과 리액트의 라이프 사이클에 대해 배웠다
자주 배우지만 자주 까먹어서 이번에는 잊지 않으려고 나만의 방식으로 적어보려고 한다
3가지 단계로 되어있다
아직 화면에 나오기 전, 즉 이 컴포넌트가 렌더링 되기전이다!
JSX코드를 브라우저가 이해할 수 있게 Babel이 컴파일 한 후 DOM에 그려짐!
브라우저 즉 DOM에 컴포넌트가 적용된 후이고, 이때부터 DOM 이벤트를 사용할 수 있다
ex) ajax요청, 화면 높이 값 등을 이때 만듦
Props 나 State가 변경시 발생
리액트는 해당 컴포넌트를 리 렌더링함! => 그 부분만 업데이트
shouldComponentUpdate(nextProps, nextState) {
// nextProps를 받아오고 이걸 현재 props랑 비교하고 다른 부분만 리턴!
return (JSON.stringfy(nextProps) != JSON.stringfy(this.pops)
}
이 과정을 거친 후 Re Render가 된다!
제거의 경우 componentWillMount를 해주면 컴포넌트가 완전 제거 된다
-> 지금은 에러가 나는 문제로 사용하지 않는다고 한다
함수형 컴포넌트에서 클래스형에서 라이프사이클 관리하는 것보다 쉽게 관리할 수 있게 해주기 위해서이다!
useState: 값이 바뀌면 리렌더링됨!
변수: 변수가 증가되거나 감소되도 화면에 보여지지 않고 리렌더링 되지도 않는다!! -> 써도 의미없다!
useRef: 바뀐값이 저장은 되지만 다른 요소에 의해 리렌더링 되기 전까지는 DOM에 바뀐내용이 적용이 안된다!!
useEffect(()=>{}) 이렇게만 적혀있는 경우
이건 componentWillMount + shouldComponentUpdate 섞은거다
처음 렌더링 될때와, 리렌더링 될때마다 적용한다!!
useEffect(()=>{},[]) 이렇게만 적혀있는 경우
이건 componentWillMount이고 처음 렌더링 될때만 적용되고 실행된다!
useEffect(()=>{},[state]) 이렇게만 적혀있는 경우
이 state가 변할때마다 실행!
useEffect(()=> {
// document.title은 위에 이모티콘옆에 문구 바꾸는거
const time = setInterval(()=> {
console.log('반복반복')
},1000)
console.log('useEffect실행!')
// clean up 코드 -> 컴포넌트가 화면에서 사라질때 실행!
return() => {
console.log('cleanup!!!')
clearInterval(time)
}
},[])
즉 컴포넌트가 지워질때 발생하는 이벤트이다!
https://github.com/parkkunghyun/react-phoneList-useState-useEffect-