header-img
Info :
728x90

UseEffect ๋ž€. ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” Hook์ž„.

โ€‹

๊ธฐ์กด์—๋Š” ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ.

useEffect๋ฅผ ์“ฐ๋ฉด ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ side effect ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ผ์ดํ”„์‚ฌ์ดํด hook(componentDidMount, componentDidUpdate, componentWillUnMount)์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” useEffect.

 

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

import { useEffect } from 'react';

function useeffecttest() {

  // ์‚ฌ์šฉ๋ฒ• 1. ์ข…์†์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜ ์—†์Œ.
  useEffect(() => {
    DoSomething();
  });

  // ์‚ฌ์šฉ๋ฒ• 2. ๋นˆ ์ข…์†์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜
  useEffect(() => {
    DoSomething();
  }, []);

  // ์‚ฌ์šฉ๋ฒ• 3. ์ผ๋ถ€ ์ข…์†์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐฐ์—ด
  useEffect(() => {
    DoSomething();
  }, [counter1, counter2]);
}

 

  1. ์„ ์–ธ. ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” ํ•จ์ˆ˜, ๋‘๋ฒˆ์งธ ์ธ์ž๋Š” ๋ฐฐ์—ด์ด ๋“ค์–ด๊ฐ.
  2. function ์•ˆ์— ์žˆ๋Š” ์‚ฌ์šฉ๋ฒ• ํ˜•ํƒœ ์ค‘์— ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ ์›ํ•˜๋Š” ๊ณณ์—์„œ ์‚ฌ์šฉ!

 

๊ฐ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•œ ์„ค๋ช…

 

์‚ฌ์šฉ๋ฒ• 1. ์ข…์†์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” useEffect()

    useEffect ( () => { 
        DoSomething (); 
    });

 

๋ Œ๋”๋ง ์ดํ›„์— ์‹คํ–‰ํ•  ํ•จ์ˆ˜. ํ™”๋ฉด ๋ Œ๋”๋ง์ด ๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰์ด ๋จ.

์„ค๋ช…ํ•˜์ž๋ฉด componentDidMount ์™€ componentDidUpdate ๋ฅผ ํ•จ๊ป˜ ํ‘œํ˜„ํ•œ ๊ฐœ๋….

 

์‚ฌ์šฉ๋ฒ• 2. ๋นˆ ์ข…์†์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐฐ์—ด์ด ์žˆ๋Š” useEffect()

    useEffect ( () => { 
        DoSomething (); 
     }, []) ;

 

๋นˆ ๋ฐฐ์—ด์„ ์„ ์–ธํ•  ์‹œ, ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์‹œ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋œ๋‹ค.

C# ์œผ๋กœ ๋น„๊ต๋ฅผ ํ•˜์ž๋ฉด FormLoad() ์ด๋ฒคํŠธ์˜ ๊ฐœ๋…์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

์‚ฌ์šฉ๋ฒ• 3. ์ผ๋ถ€ ์ข…์†์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐฐ์—ด์ด ์žˆ๋Š” useEffect()

    useEffect ( () => { 
        DoSomething (counter1, counter2); 
    }, [counter1, counter2]);

 

์ฃผ์˜์ . ๋งค๊ฐœ๋ณ€์ˆ˜ ์˜ ๊ฒฝ์šฐ useState() ํ˜น์€ Redux ๊ฐ™์€ DOM ์„ ๋ณ€๊ฒฝ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜ ํ˜•ํƒœ์—ฌ์•ผ ํ•œ๋‹ค.

โ€‹

๋ฐฐ์—ด ์•ˆ์— ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์˜ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚  ๋•Œ๋งˆ๋‹ค useEffect ์•ˆ์˜ ๋‚ด์šฉ์ด ์‹คํ–‰๋œ๋‹ค.

C# ๊ณผ ๋น„๊ตํ•˜๋ฉด propertychanged() ์ด๋ฒคํŠธ ํ˜น์€ propertychanging() ์ด๋ฒคํŠธ ์™€ ์œ ์‚ฌํ•˜๋‹ค.

 

 

์˜ˆ์ œ

useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await AxiosCustomInstance({}).get(props.url);
        dataList = response.data; // dataList

        if (dataList && dataList.length > 0) {
          let newOptions = dataList.map((item) => ({
            value: item[valueName],
            label: item[labelName],
            name: props.name,
            ALL: item[valueName],
          }));

          let newArray = [newFirstElement].concat(newOptions);
          setOptions(newArray);

          // multiSelect ์ผ ๊ฒฝ์šฐ defalut value ํ•„์š”์—†์Œ
          if (props.isMultiSelect !== undefined) {
            // value ํ”„๋กœํผํ‹ฐ๋ฅผ ALL ํ”„๋กœํผํ‹ฐ์— ํ• ๋‹น
            newOptions.value = newOptions.ALL;

            // ๊ธฐ์กด value ํ”„๋กœํผํ‹ฐ ์ œ๊ฑฐ
            delete newOptions.value;
            setArrayList(newOptions);
          }
        } else {
          // dataList๊ฐ€ ์—†์„ ๊ฒฝ์šฐ Select/ALL๋งŒ ๋ฐ”์ธ๋”ฉ
          setOptions([newFirstElement]);
        }
      } catch (error) {
        console.error("Error fetching " + props.name + ":", error);
      }
    };
    fetchData();
  }, []);

 

์ด๋Ÿฐ ์‹์œผ๋กœ ํ™”๋ฉด ์ดˆ๊ธฐ ๊ฐ’์„ api ๋กœ ๋ถˆ๋Ÿฌ์™€ ํ™”๋ฉด ์…‹ํŒ…์„ ํ•ด์ฃผ๋Š” ๋ฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 


โ€‹๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ๊ฐœ๋ฐœํ•˜๋ฉฐ ๋Š๊ผˆ๋˜ ๋‡Œํ”ผ์…œ๋กœ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์œผ๋‹ˆ, 
๊ถ๊ธˆํ•˜์‹  ์ ์ด๋‚˜ ์ž˜๋ชป๋œ ์ ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

728x90
๋”๋ณด๊ธฐ
Document/๋จ•์„ ์ƒ์˜ ์ฝ”๋”ฉ๊ต์‹ค