web/react

[React] useEffect

1. useEffect ํ•จ์ˆ˜๋ž€?

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

 

2. useEffect ์‚ฌ์šฉ๋ฒ•

๐Ÿ”น ์ฒซ ๋ฒˆ์งธ

useEffect(() => {});
  • useEffect์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ ํ˜•ํƒœ์ด๋‚˜, ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.
  • Dependency๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ž‘์€ ์š”์†Œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ๋ณ€ํ™”ํ•  ๋•Œ๋งˆ๋‹ค useEffect๊ฐ€ ๋ฐœ๋™๋˜์–ด ๋ถˆํ•„์š”ํ•œ ์‹คํ–‰์ด ๋งŽ์•„์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ”น ๋‘ ๋ฒˆ์งธ

useEffect(() => {}, []);
  • useEffect์—์„œ ์„ค์ •ํ•œ ํ•จ์ˆ˜๊ฐ€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ๊ฐ€์žฅ ์ฒ˜์Œ ๋ Œ๋”๋ง ๋  ๋•Œ๋งŒ ์‹คํ–‰ํ•œ๋‹ค.

๐Ÿ”น ์„ธ ๋ฒˆ์งธ

useEffect(() => {}, [name]);
  • useEffect๋ฅผ ํŠน์ • ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋  ๋•Œ ํ˜ธ์ถœํ•œ๋‹ค.
  • useEffect๋ฅผ ๋ Œ๋”๋ง ํ›„ ํ•œ๋ฒˆ, ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด ์•ˆ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰ํ•œ๋‹ค.

 

3. useEffect ์‚ฌ์šฉ ์˜ˆ์‹œ

๐ŸŒ  ํด๋ฆญํ•œ ํšŸ์ˆ˜์˜ ๊ฐ’์„ alert ์ฐฝ์— ๋„์›Œ์ฃผ๋Š” ์˜ˆ์ œ

const myButton = () => {
    const [count, setCount] = useState(0);
    
    useEffect(() => {
    	alert(count);
    });
    
    const showClickNum = () => {
    	setCount(count + 1);
    };
    
    return (
    	<button onClick = {showClickNum}>
        	Click Me
        </button>
    );

};

export default myButton;
  • ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญํ•˜๋ฉด showClickNum ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, ์ด ํ•จ์ˆ˜๋Š” count ๊ฐ’์— 1์„ ๋”ํ•œ๋‹ค.
  • ์ด ๊ฒฝ์šฐ์— ์ƒํƒœ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋˜๋ฏ€๋กœ alert๋ฅผ ์ถœ๋ ฅํ•˜๋Š” useEffect()๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค.

 

๐ŸŒ  ํŠน์ • ๋ณ€์ˆ˜ ๊ฐ’์—๋งŒ ๋™์ž‘ํ•˜๋Š” useEffect()

useEffect(() => {
    alert('Updated!');
});

useEffect(() => {
    alert(count);
}, [count]);
  • ์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ณ€๊ฒฝ, ์—…๋ฐ์ดํŠธ ๋  ๊ฒฝ์šฐ ๋™์ž‘ํ•œ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ์ฝ”๋“œ: count ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋œ ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น ์ฝœ๋ฐฑ์„ ์‹คํ–‰ํ•œ๋‹ค.

 

๐ŸŒ  useEffect()๋ฅผ props์—๋„ ์‚ฌ์šฉํ•˜๊ธฐ

useEffect(() => {
    alert('Props Updated');
}, [props.siteName]);
  • useEffect์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž ๊ฐ’์€ [] ๋‚ด๋ถ€์— state ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ „๋‹ฌ๋ฐ›์€ props ๊ฐ’ ๋˜ํ•œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ฆ‰, ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ props์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ์ฝ”๋“œ ์—ญ์‹œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์œ„์˜ ์ฝ”๋“œ๋Š” ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ props.siteName ๊ฐ’์ด ๋ณ€ํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

 

 

 

 

 

 

[ ์ฐธ๊ณ  ]

- https://velog.io/@velopert/react-hooks

- https://ko-de-dev-green.tistory.com/18

- https://webisfree.com/2020-11-30/react-%ED%95%A8%EC%88%98%ED%98%95-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-useeffect-%ED%9B%85-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C

 

'web > react' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[React] props  (0) 2021.09.15
[React] ๋ฆฌ์•กํŠธ ์‹œ์ž‘ํ•˜๊ธฐ  (0) 2021.09.13
[React] ์ปดํฌ๋„ŒํŠธ์™€ state  (0) 2021.09.13