React - useDidMount custom hook

3147 ๋‹จ์–ด useDidMountReactCustomHookCustomHook

useDidMount hook ์ƒ์„ฑํ•˜๊ธฐ

React์˜ classํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” componentDidMount๋ผ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

๋ฆฌ์•กํŠธ 16.8๋ฒ„์ „ ์ดํ›„ hook์ด ๋„์ž…๋˜์—ˆ์ง€๋งŒ componentDidMount์™€ ๊ทธ๋‚˜๋งˆ ์œ ์‚ฌํ•œ hook์€ useEffect๊ฐ€ ์œ ์ผํ•˜๋‹ค.

๋‚ด ์ƒ๊ฐ์œผ๋กœ๋Š” hook์„ ๋„์ž…ํ•œ ์ดํ›„ custom hook์„ ์ด์šฉํ•œ ๊ธฐ๋Šฅ๋“ค์˜ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ํ•„์š”์„ฑ์„ ๋Š๋ผ์ง€ ๋ชปํ•ด ์ƒˆ๋กœ์šด hook์„ ๋งŒ๋“ค์ง€๋Š” ์•Š์€ ๊ฒƒ์œผ๋กœ ์ถ”์ •ํ•œ๋‹ค.

๊ทธ๋Ÿผ ์ง์ ‘ํ•œ๋ฒˆ ๊ตฌํ˜„ํ•ด๋ณด์ž.

useDidMount ๋งŒ๋“ค๊ธฐ

๋ฆฌ์•กํŠธ์˜ componentDidMount์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋‹ค์Œ๊ฐ™์ด ๋˜์–ด์žˆ๋‹ค.

componentDidMount()๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋œ ์งํ›„, ์ฆ‰ ํŠธ๋ฆฌ์— ์‚ฝ์ž…๋œ ์งํ›„์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. DOM ๋…ธ๋“œ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋Š” ์ดˆ๊ธฐํ™” ์ž‘์—…์€ ์ด ๋ฉ”์„œ๋“œ์—์„œ ์ด๋ฃจ์–ด ์ง€๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๋ Œ๋”๋ง์ธ์ง€๋ฅผ boolean๊ฐ’์œผ๋กœ ์•Œ๋ ค์ฃผ๋ฉด if๋ฌธ์˜ ์กฐ๊ฑด์œผ๋กœ ๋„ฃ์–ด์„œ true์ผ๋•Œ๋งŒ ์ฝ”๋“œ ๋ธ”๋ก์„ ์‹คํ–‰ ์‹œํ‚ค๋ฉด componentDidMount์™€ ๋˜‘๊ฐ™์ธ ๋™์ž‘์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

useDidMount

import { useRef, useEffect } from 'react';

const useDidMount = () => {
    const didMountRef = useRef(false);

    useEffect(() => {
        didMountRef.current = true;
    }, []);

    return didMountRef.current;
};

export default useDidMount;

์ดˆ๊ธฐ ๋ Œ๋”๋ง์‹œ useEffect๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ useDidMount๋Š” true๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.

useState ๋Œ€์‹  useRef๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ 

๊ทธ ์ด์œ ๋Š” useState๋กœ useRef๋ฅผ ๋Œ€์ฒดํ•œ ํ›„ console.log๋ฅผ ํ•˜๋‚˜ ์ฐ์–ด๋ณด๋ฉด ๋ฐ”๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

useState๋Š” DOM์„ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ๋–„๋ฌธ์— console.log๊ฐ€ ๋‘ ๋ฒˆ์ฐํž ๊ฒƒ์ด๋‹ค.
์ด๋Š” ๋ถˆํ•„์š”ํ•œ ์ƒํ™ฉ์ด๋ฏ€๋กœ useRef๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ