useFirstRender

Introduction

useIsFirstRender ํ›…์„ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ๋œ ์ด์œ ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ง์—๋งŒ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

React ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์‚ฌ์ดํด ์ค‘์—์„œ ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ง๊ณผ ์ดํ›„์˜ ๋ Œ๋”๋ง์€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ, ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์š”์ฒญ, ํ˜น์€ ํŠน์ •ํ•œ ์„ค์ • ๋“ฑ์€ ์ฃผ๋กœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ ๋งˆ์šดํŠธ๋  ๋•Œ๋งŒ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ์— useIsFirstRender ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์„ ํ†ตํ•ด ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ง์—๋งŒ ํŠน์ • ์ฝ”๋“œ ๋ธ”๋ก์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ถˆํ•„์š”ํ•œ ์ž‘์—…์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด๋‚˜ ์ดˆ๊ธฐํ™” ์ž‘์—…์€ ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ง์—์„œ๋งŒ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ, ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์กฐ๊ฑด๋ถ€๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๋กœ์ง์„ ๋” ๊น”๋”ํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.

Example

import React, { useEffect } from "react";
โ€‹
const MyComponent = () => {
 ย // ์ปค์Šคํ…€ ํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ง์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
 ย const isFirstRender = useIsFirstRender();
โ€‹
 ย // useEffect๋Š” ๋ชจ๋“  ๋ Œ๋”๋ง์—์„œ ์‹คํ–‰๋˜์ง€๋งŒ, isFirstRender ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ
 ย // ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ง์ผ ๋•Œ๋งŒ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 ย useEffect(() => {
 ย  ย if (isFirstRender) {
 ย  ย  ย console.log("์ด ์ฝ”๋“œ๋Š” ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ง์—์„œ๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค!");
 ย  ย  ย // ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ง์—๋งŒ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ ์—ฌ๊ธฐ์— ์ˆ˜ํ–‰ํ•˜์„ธ์š”.
 ย   } else {
 ย  ย  ย console.log("์ด ์ฝ”๋“œ๋Š” ๋‘ ๋ฒˆ์งธ ์ดํ›„ ๋ Œ๋”๋ง์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค!");
 ย  ย  ย // ๋‘ ๋ฒˆ์งธ ์ดํ›„ ๋ Œ๋”๋ง์— ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ ์—ฌ๊ธฐ์— ์ˆ˜ํ–‰ํ•˜์„ธ์š”.
 ย   }
โ€‹
 ย  ย // ๋ชจ๋“  ๋ Œ๋”๋ง์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ •๋ฆฌ ์ž‘์—…์ด๋‚˜ ์ž‘์—…์„ ์—ฌ๊ธฐ์— ์ˆ˜ํ–‰ํ•˜์„ธ์š”.
โ€‹
 ย  ย // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []); // ๋นˆ ์˜์กด์„ฑ ๋ฐฐ์—ด์€ ์ด useEffect๊ฐ€ ๋งˆ์šดํŠธ์™€ ์–ธ๋งˆ์šดํŠธ ๋•Œ๋งŒ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
โ€‹
 ย // ๋‚˜๋จธ์ง€ ์ปดํฌ๋„ŒํŠธ ๋กœ์ง์€ ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•˜์„ธ์š”.
โ€‹
 ย return (
 ย  ย <div>
 ย  ย   {/* ์ปดํฌ๋„ŒํŠธ์˜ JSX ๋ถ€๋ถ„ */}
 ย  ย </div>
  );
};
โ€‹
export default MyComponent;

useEffect ํ›…์€ ๋ชจ๋“  ๋ Œ๋”๋ง์—์„œ ์‹คํ–‰๋˜์ง€๋งŒ, useIsFirstRender ํ›…์ด ๋ฐ˜ํ™˜ํ•œ isFirstRender ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ง์ธ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์กฐ๊ฑด๋ถ€๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Hook

Last updated