๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

FA/React

22020926 React Hooks - useState, useEffect

Hook์€ class๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ state๋“ฑ ๋‹ค๋ฅธ React์˜ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

Hook์˜ ๊ทœ์น™

  • React ํ•จ์ˆ˜ ๊ตฌ์„ฑ ์š”์†Œ ๋‚ด์—์„œ๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Œ(๋ฐ˜๋“œ์‹œ Functional Component ์•ˆ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•จ)
  • ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ตœ์ƒ์œ„์—์„œ๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Œ
  • ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ ์•ˆ์—์„œ ๋ชป ์”€

useState

State: ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ

//State ์‚ฌ์šฉํ•˜๊ธฐ
const [state, setState] = useState(initialState);



//์ฝœ๋ฐฑ์œผ๋กœ ์ดˆ๊นƒ๊ฐ’ ์ง€์ •ํ•˜๊ธฐ
//์ดˆ๊นƒ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•œ ๊ฒฝ์šฐ์— ํ™œ์šฉ
const [state, setState] = useState(() => {
  // ...
  return initialState;
});



//State ๋ณ€๊ฒฝ
setState(nextState);



//์ด์ „ State๋ฅผ ์ฐธ์กฐํ•ด์„œ State ๋ณ€๊ฒฝ
//๋น„๋™๊ธฐ ํ•จ์ˆ˜์—์„œ ์ตœ์‹  State ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ ์ƒˆ๋กœ์šด State ๊ฐ’์„ ๋งŒ๋“ค ๋•Œ
setState((prevState) => {
  // ...
  return nextState
});

 

 

 const [state, setState] = useState(์ดˆ๊ธฐ๊ฐ’);
 // state ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ๊ฐ€์ ธ์•ผ๋  ์ดˆ๊ธฐ ๊ฐ’์„ ()์— ์ธ์ž๋กœ ๋„ฃ์–ด ์คŒ
 // state ํ˜„์žฌ ์ƒํƒœ ๊ฐ’
 // state ๊ฐ’์„ ๋ณ€๊ฒฝ ์‹œ์ผœ ์ฃผ๊ณ  ์‹ถ์„๋•Œ setState์„ ์‚ฌ์šฉ
 
  
 const ์ดˆ๊ธฐ๊ฐ’ = () => {
   return ['์ดˆ๊ธฐ๊ฐ’1' , ์ดˆ๊ธฐ๊ฐ’2]};
   
  const [state, setState] = useState(()=> {
     retutn ์ดˆ๊ธฐ๊ฐ’();
     });
 //์ดˆ๊ธฐ๊ฐ’์„ ๋ถˆ๋Ÿฌ ๊ฐ€์ ธ์˜ฌ๋•Œ ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ํ•ด์•ผ ๋œ๋‹ค๋ฉด ์ฝœ๋ฐฑ์œผ๋กœ!
 //์ฝœ๋ฐฑ์œผ๋กœ ๋ถˆ๋Ÿฌ์ฃผ๋ฉด ๋งจ์ฒ˜์Œ ํ™”๋ฉด์— ๋ Œ๋”๋ง ๋ ๋•Œ๋งŒ ๋ถˆ๋ ค์ง€๊ฒŒ ๋จ
 
 
 //state๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์ƒˆ๋กœ๋ณ€๊ฒฝ ๋  ์Šคํ…Œ์ดํŠธ ๊ฐ’์ด ์ด์ „ ์Šคํ…Œ์ดํŠธ ๊ฐ’๊ณผ ์—ฐ๊ด€์ด ๋˜์–ด์žˆ๋‹ค๋ฉด
 setState((prevState) => {
    //setState์˜ ์ธ์ž๋กœ ๋ฆฌํ„ดํ•˜๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜
   return newState;  
 });

 

 

 

useEffect

Mount ํ™”๋ฉด์— ์ฒซ ๋ Œ๋”๋ง / Update ๋‹ค์‹œ ๋ Œ๋”๋ง / Unmount ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์งˆ๋•Œ

ํŠน์ • ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด ์‚ฌ์šฉ

์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜์—์„œ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ(๋ฆฌ์•กํŠธ ์™ธ๋ถ€์˜ ๊ฐ’์ด๋‚˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ)์— ํ™œ์šฉํ•˜๋Š” ํ•จ์ˆ˜

//์ฒ˜์Œ ๋ Œ๋”๋ง ํ›„์— ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰
useEffect(() => {
  // ...
}, []);



//๋ Œ๋”๋ง ํ›„์— ํŠน์ • ๊ฐ’์ด ๋ฐ”๋€Œ์—ˆ์œผ๋ฉด ์‹คํ–‰
//์ฐธ๊ณ ๋กœ ์ฒ˜์Œ ๋ Œ๋”๋ง ํ›„์—๋„ ํ•œ ๋ฒˆ ์‹คํ–‰๋จ
useEffect(() => {
  // ...
}, [dep1, dep2, dep3, ...]);



//์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ์ •๋ฆฌ(Cleanup)ํ•˜๊ธฐ
useEffect(() => {
  // ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ

  return () => {
    // ์ •๋ฆฌ
  }
}, [dep1, dep2, dep3, ...]);

 

 

 

// ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝœ๋ฐฑ

useEffect(() => {์ž‘์—…์ฝ”๋“œ})
//ํ•˜๋‚˜์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋งŒ ๋ฐ›์Œ
// ๋ Œ๋”๋ง ๋ ๋•Œ ๋งˆ๋‹ค ์‹คํ–‰

useEffect(() => {},[value])
//ํ™”๋ฉด์— ์ฒซ ๋ Œ๋”๋ง ๋ ๋•Œ ์‹คํ–‰
//value ๊ฐ’์ด ๋ฐ”๋€” ๋•Œ ์‹คํ–‰

useEffect(() => {},[])
//๋นˆ๋ฐฐ์—ด์€ ํ™”๋ฉด์— ์ฒซ ๋ Œ๋”๋ง ๋ ๋•Œ๋งŒ ์‹คํ–‰

 

 

 

์ฐธ๊ณ  ๋ฐ ์ถœ์ฒ˜

https://ko.reactjs.org/docs/hooks-reference.html

 

Hooks API Reference – React

A JavaScript library for building user interfaces

ko.reactjs.org

https://www.w3schools.com/react/react_hooks.asp

 

React Hooks

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com