๐Ÿš€ useState๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋ ๊นŒ? (feat. axios)

๋‘๋ถ€๋งยท2025๋…„ 3์›” 20์ผ

์ด๋ชจ์ €๋ชจ...

๋ชฉ๋ก ๋ณด๊ธฐ
4/12

React์—์„œ useState๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์ƒํƒœ๊ฐ€ ๋ฐ”๋กœ ๋ฐ”๋€” ๊ฒƒ ๊ฐ™์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์ฆ‰์‹œ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š”๋‹ค!
ํŠนํžˆ axios์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋” ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋Š”๋ฐ, ์™œ ๊ทธ๋Ÿฐ์ง€ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด๋ณผ๊ฒŒ.

์˜๋ฌธ์ ?

  • setState ๋กœ isAnswered๋กœ ์ƒํƒœ๊ฐ’์ด true ๋ณ€๊ฒฝ์ด ๋๋Š”๋ฐ... console ์ฐฝ์—๋Š” false ๋กœ ๋‚˜์˜ค์ง€...?

1๏ธโƒฃ useState๋Š” ์›๋ž˜ ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค?

  • useState๋Š” ๋™์ž‘ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€๋งŒ, ์ƒํƒœ ๋ณ€๊ฒฝ์€ ์ฆ‰์‹œ ๋ฐ˜์˜๋˜์ง€ ์•Š๊ณ  "์˜ˆ์•ฝ"๋œ ํ›„์— ์—…๋ฐ์ดํŠธ๋œ๋‹ค!
    ์ฆ‰, ๋ฆฌ์•กํŠธ๋Š” ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•œ๊บผ๋ฒˆ์—(batch) ์—…๋ฐ์ดํŠธํ•˜๋Š” ํŠน์ง•์ด ์žˆ์–ด.
const [count, setCount] = useState(0);

setCount(1);
console.log(count); // โ“ ์˜ˆ์ƒ: 1 โ†’ โŒ ์‹ค์ œ: 0

setCount(1)์„ ํ–ˆ๋Š”๋ฐ ์™œ console.log(count)๋Š” 0์ผ๊นŒ?
๐Ÿ‘‰ ์ด์œ : setState๋Š” "์ƒํƒœ ๋ณ€๊ฒฝ์„ ์˜ˆ์•ฝ"๋งŒ ํ•˜๊ณ , ๋‹ค์Œ ๋ฆฌ๋ Œ๋”๋ง ๋•Œ ๋ฐ˜์˜๋˜๊ธฐ ๋•Œ๋ฌธ!

2๏ธโƒฃ ๊ทธ๋Ÿฐ๋ฐ axios๋ž‘ ๊ฐ™์ด ์“ฐ๋ฉด ๋น„๋™๊ธฐ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค๊ณ ?

axios๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ผ์„œ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ด!
๊ทธ๋ž˜์„œ axios ์•ˆ์—์„œ setState๋ฅผ ํ•˜๋ฉด, ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ๋ฐ›์€ ํ›„์— ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฑฐ์•ผ.

const [data, setData] = useState(null);

useEffect(() => {
  axios.get("https://api.example.com/data")
    .then((res) => {
      setData(res.data); // โ— ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์€ ํ›„ ์ƒํƒœ ๋ณ€๊ฒฝ
    });

  console.log(data); // โŒ ์—ฌ์ „ํžˆ null (์ด์ „ ๊ฐ’)
}, []);

setData(res.data);๋ฅผ ํ–ˆ๋Š”๋ฐ๋„, console.log(data);๊ฐ€ null๋กœ ์ฐํžˆ๋Š” ์ด์œ ๋Š”?
๐Ÿ‘‰ ์ด์œ : axios๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ๋„ ์ „์— console.log๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ!

3๏ธโƒฃ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€?

โœ… useEffect๋ฅผ ํ™œ์šฉํ•ด์„œ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋œ ํ›„์— console.log๋ฅผ ์ฐ์œผ๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด!

useEffect(() => {
  console.log("๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ๋จ:", data);
}, [data]); // ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์‹คํ–‰๋จ!

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋œ ํ›„์— ๋กœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋˜๋ฏ€๋กœ, ์›ํ•˜๋Š” ๊ฐ’์„ ๋ณผ ์ˆ˜ ์žˆ์–ด! ๐Ÿ˜Š

4๏ธโƒฃ ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•˜์ž๋ฉด!

  • useState๋Š” ์ƒํƒœ๋ฅผ ๋ฐ”๋กœ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ์˜ˆ์•ฝ ํ›„ ๋ฆฌ๋ Œ๋”๋ง ๋•Œ ๋ฐ˜์˜!

  • axios๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ผ์„œ, ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ๋ฐ›์•„์•ผ setState๊ฐ€ ์‹คํ–‰๋จ.

  • ๊ทธ๋ž˜์„œ axios ์•ˆ์—์„œ setState๋ฅผ ํ•˜๋ฉด "๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ" ๋ณด์ด์ง€๋งŒ, ์‚ฌ์‹ค useState ์ž์ฒด๋Š” ํ•ญ์ƒ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•จ.

  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•? useEffect๋ฅผ ํ™œ์šฉํ•ด์„œ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€ ํ›„์— ์›ํ•˜๋Š” ๊ฐ’์„ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค!

๐ŸŽฏ ํ•œ ์ค„ ์ •๋ฆฌ

useState๋Š” ๋น„๋™๊ธฐ์ฒ˜๋Ÿผ ๋ณด์ผ ๋•Œ๊ฐ€ ์žˆ์ง€๋งŒ, ์‚ฌ์‹ค "์˜ˆ์•ฝ"๋œ ํ›„ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๊ฒƒ์ผ ๋ฟ์ด๋‹ค!

๋™๊ธฐ ๋น„๋™๊ธฐ ์ดํ•ด ๋ธ”๋กœ๊ทธ

  • ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ์˜ ์ดํ•ด ์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ

    https://seo0yoon.tistory.com/124
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์ด๊ธฐ์— ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ๋ฐ–์— ์—†๊ตฌ๋‚˜....

profile
ํ•˜์ดํ•˜์ž‰

0๊ฐœ์˜ ๋Œ“๊ธ€