생명주기(life cycle)
1. class컴포넌트
- constructor() : 컴포넌트의 생성자 메소드로, 가장 먼저 실행된다.
- getDerivedStateFromProps : prop으로 받아온 것을 state에 설정하고 싶을 때 사용한다.
- render() : 컴포넌트를 렌더링한다.
- ref
- componentDidMount() (렌더함수가 실행되고 리액트가 jsx를 돔에 붙이는 순간!)
- setState/props 바뀜
- getDerivedStateFromProps : 컴포넌트의 props나 state가 바뀌었을 때도 해당 메소드를 호출한다.
- shouldComponentUpdate값이 true (값이 false면, componentWillunmount로 이동.)
- render()
- componentDidUpdate() : 리렌더링을 마치고 화면에 변화가 모두 반영된 후 호출하는 메서드.
세 번째 파라미터로 getSnapshotBeforeupdate 에서 반환한 값을 조회할 수 있다. - (부모가 나를 없앴을 때) componentWillunmount() : 컴포넌트가 화면에서 사라지기 직전에 호출.
- 소멸
2. 함수 컴포넌트(hooks)
class컴포넌트처럼 생명주기를 지원하는 메서드는 없지만, hook을 사용해서 대처할 수 있다.
useEffect(() => {
// 여기에 componentDidmount, componentDidUpdate 로직
return() => {
// 여기에 componentWillUnmount 로직
}
}, [dependency list]);
- [dependency list]이 빈 배열이면, componentDidmount() 와 같다.
- [dependency list]에 값이 있으면 componentDidmount(), componentDidupdate() 둘 다 수행.
- [dependency list]에 조건문이나 useRef를 넣을 수도 있음.
- [dependency list]에 들어가는 값이 배열일 경우, "timeouts.current[i] = x; " 이렇게 배열의 요소 값 변경하는건 감지 못함.
"timeouts.current = x;" 이렇게 직접 변경하는경우만 감지.
참조
https://www.zerocho.com/category/React/post/579b5ec26958781500ed9955#google_vignette
'React' 카테고리의 다른 글
React - 리액트를 렌더링하는 방식에 대해(CSR, SPA 등) (0) | 2023.10.25 |
---|---|
React - 화면 이동하기(Router, Link, Navigate) (0) | 2023.10.25 |
React - 배열을 렌더링시 key를 써야 하는 이유 (0) | 2023.10.23 |
React - Virtual DOM (0) | 2023.10.23 |
React - 데이터 다루기 (0) | 2023.10.20 |