React

useEffect

soheedev 2023. 3. 9. 19:05

React의 생명주기

react의 component에는 생명주기가 있는데 컴포넌트가 표시되고 사라지는 순간까지를 말한다.

컴포넌트가 실행되거나 업데이트되거나 제거될 때, 특정한 이벤트들이 발생한다.

mount (컴포넌트가 표시될 때)update (컴포넌트 내부의 요소가 업데이트될 때)unmount (컴포넌트가 사라질 때)

useEffect 는 위 3가지 시점중 하나를 골라서, 해당 시점에 특정한 함수가 실행되도록 하는 Hook이다.

 

1. mount

useEffect(컴포넌트가 표시될 때 실행할 함수, [])

화면이 로딩되고 나서 3초 뒤에 변수의 값이 변하는 예제

import React, { useState, useEffect } from 'react'

function Loading() {
  const [isLoaded, setIsLoaded] = useState(false)

  useEffect(() => {
    setTimeout(() => {setIsLoaded(true)}, 3000)// 3초뒤 isLoaded 변수 값을 변경
  }, [])

  return (
    <div>
        {isLoaded ? <>로딩완료!</> : <>로딩 중</>}
    </div>
  )
}

export default Loading

 

2.update

useEffect(업데이트할 함수, [업데이트 되는지 지켜볼 변수/State]);

- 로딩이 완료된 후 텍스트가 추가되는 예제

- 컴포넌트가 첫 렌더링될 때 한 번 실행되고, 그 다음부터는 isLoaded 값이 바뀔 때마다 계속 실행된다.

import React, { useState, useEffect } from 'react'

function Loading() {
  const [isLoaded, setIsLoaded] = useState(false)
  const [text, setText] = useState([])

  useEffect(() => {
    setTimeout(() => {setIsLoaded(true)}, 3000)
  }, [])

  // isLoaded 값이 변경할 때마다 실행
  useEffect(() => {
    const temp = text.concat(['추가!'])
    setText(temp)
  }, [isLoaded])

  return (
    <div>
        {isLoaded ? <>로딩완료!</> : <>로딩 중</>}
        {text}
    </div>
  )
}

export default Loading

3.unmount

useEffect(() => {return () => 컴포넌트가 사라질 때 실행할 함수})

 

 

20230228 패스트캠퍼스 FE4기 수업자료를 참고하였습니다.

'React' 카테고리의 다른 글

Styled-components  (0) 2023.03.21
useRef  (0) 2023.03.20
이벤트핸들러  (0) 2023.03.15
불변성  (0) 2023.03.08
props, useState  (0) 2023.03.08