React - state useState (1)

TH_velogยท2023๋…„ 8์›” 11์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
4/16
post-thumbnail
post-custom-banner

๐Ÿ–‹๏ธ์ƒ์ดˆ๋ณด์˜ ๊ธฐ๋ก์šฉ Velogโœ…
โ€ป ์ž์„ธํ•œ ์„ค๋ช…์€ ๊ตฌ๊ธ€๋ง ๋‹ค๋ฅธ ๋ถ„๋“ค ์ฐธ๊ณ  โœ”๏ธ

๐Ÿ“Œstate

๐Ÿ“ state?

  • ๋™์ ์ธ ๊ฐ’์„ state๋กœ ๋ถ€๋ฆ…๋‹ˆ๋‹ค
  • state ์ƒํƒœ ๋ณ€์ˆ˜๋Š” ๋ฆฌ์•กํŠธ์— ๋ณด๊ด€๋˜์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • state ๊ฐ’์ด ๋ณ€๊ฒฝ ๋˜๋ฉด ์žฌ๋žœ๋”๋ง ๋˜์–ด ๋ณ€๊ฒฝ๋œ ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • state ๊ฐ’์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
  • useState ๋ผ๋Š” Hook์„ ์‚ฌ์šฉํ•˜์—ฌ state ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • ... ๋“ฑ

๐Ÿ“ useState

  • React Hook
  • useState๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ๋ฐ”๋€Œ๋Š” state ๊ฐ’์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋ฃจํ”„๋‚˜ ์กฐ๊ฑด ๋‚ด ํ˜ธ์ถœ ๋ถˆ๊ฐ€. ์ตœ์ƒ์œ„์—์„œ ํ˜ธ์ถœ ์‚ฌ์šฉ
  • import {useState} from 'react';
  • const [state๊ฐ’, state๊ฐ’๋ณ€๊ฒฝ] = useState(์ดˆ๊นƒ๊ฐ’ ๋ณด๊ด€ ๋ฐ์ดํ„ฐ)
  • ... ๋“ฑ

๐Ÿ“์ง์ ‘ ํ•˜๋ฉด์„œ ๊ฒฝํ—˜ํ•˜๊ธฐ โŒจ๏ธ

๐ŸŽˆ App.js ์—์„œ ํ…Œ์ŠคํŠธ ์ง„ํ–‰

โœ”๏ธ ์ƒ๋‹จ์— import useSate from 'react';
โœ”๏ธ App ํ•จ์ˆ˜ ๋‚ด useState ํ›… ์‚ฌ์šฉ

  • app ํ•จ์ˆ˜ ๋‚ด ํ›… ์ž…๋ ฅ ์‹œ useState ์ž…๋ ฅ ํ›„ ์—”ํ„ฐ ์‹œ ์ž๋™์œผ๋กœ ์‚ฝ์ž…์ด ๋˜์ง€๋งŒ ์•ˆ๋  ๊ฒฝ์šฐ ์ง์ ‘ ์ž…๋ ฅ!!

โœ”๏ธ ์ฝ˜์†”์— ์ดˆ๊นƒ๊ฐ’์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!
(โš ๏ธํ•œ๊ธ€๋กœ ํ–ˆ์„ ๊ฒฝ์šฐ ๊ฐ’์€ ๋‚˜์˜ค์ง€๋งŒ ์ข‹์ง€ ์•Š๊ธฐ์— ์‹ค์ œ ์‚ฌ์šฉ ์‹œ ์˜๋ฌธ์œผ๋กœ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”)

โœ”๏ธ ๋‘ ๋ฒˆ ์ถœ๋ ฅํ•˜๋Š” ๊ฑด React์—์„œ๋Š” ์˜ค๋ฅ˜๋ฅผ ์žก๊ธฐ ์œ„ํ•ด ๋‘ ๋ฒˆ์”ฉ ๋ Œ๋”๋ง ๋œ๋‹ค๊ณ  ํ•˜๋ฉฐ ๋‘ ๋ฒˆ์”ฉ ๋‚˜์˜ค๋Š” ๊ฒŒ ๋ณด๊ธฐ ์‹ซ๋‹ค๋ฉด src/index ํŒŒ์ผ์—์„œ React.StrictMode๋ฅผ ์ง€์šฐ๋ฉด ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค

โœ”๏ธ ์ €๋Š” ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์ง„ํ–‰!!

๐ŸŽˆ state, useState ํ™œ์šฉ

import { useState } from 'react';

[state, setState] = useState('');
  โฌ‡๏ธ          โฌ‡๏ธ          โฌ‡๏ธ     
[state๊ฐ’, state๋ณ€๊ฒฝํ•จ์ˆ˜] = useState(์ดˆ๊นƒ๊ฐ’);

์ฒซ ๋ฒˆ์งธ ๋ณ€์ˆ˜ :state๊ฐ’์€ ์ดˆ๊นƒ๊ฐ’์œผ๋กœ ์ฒ˜์Œ ์ง€์ • ๋ฉ๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ ๋ณ€์ˆ˜ : state๋ณ€๊ฒฝํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค ์ฒ˜์Œ์— set์„ ๋ถ™์—ฌ์„œ ์•Œ๊ธฐ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค

โœ”๏ธ ์•„๋ž˜์™€ ๊ฐ™์ด 0์œผ๋กœ ๋ณด์—ฌ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค

โœ”๏ธ state ๊ฐ’์€ ์ „๋ถ€ ์ด๋ ‡๊ฒŒ ํ•ด์ฃผ๋ฉด ๊ฐ€๋Šฅ์€ ํ•˜์ง€๋งŒ! ๋ถˆํ•„์š”ํ•˜๊ฒŒ state๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค!
โœ”๏ธ ๋™์ž‘ ์‹œ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฐ’, ๋ณ€๊ฒฝ๋œ ๊ฐ’์ด ๋ฐ˜์˜๋˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ state์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค!

  • EX) ํด๋ฆญ ์‹œ ๊ฐ’ ๋ณ€๊ฒฝ, ๊ธ€ ๋ณ€๊ฒฝ, ์‚ญ์ œ, ์ถ”๊ฐ€ ๋“ฑ
  • โš ๏ธ๊ณ ์ •๋œ ๊ฐ’์€ state ์‚ฌ์šฉํ•˜๊ธฐ์—” ๋ถˆํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

๐ŸŽˆ๊ฐ’ ๋ณ€๊ฒฝ ํ•ด๋ณด๊ธฐ

โœ”๏ธ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์—ฌ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„ํŠผ ํด๋ฆญ์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค

<button type="button">๋ณ€๊ฒฝ!</button>

โœ”๏ธ ๋ฒ„ํŠผ ํƒœ๊ทธ๋งŒ ์žˆ๋‹ค๊ณ  ํ•ด์„œ ๋ณ€๊ฒฝ์ด ๋˜์ง„ ์•Š๊ณ  onClick ํด๋ฆญ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋™์ž‘ ๋ช…๋ น์„ ๋‚ด๋ ค์ค๋‹ˆ๋‹ค
โœ”๏ธonClick={ํ•จ์ˆ˜} ์‚ฌ์šฉ๋ฒ•

โœ”๏ธ 1,2,3 ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

โœ”๏ธ 3๋ฒˆ์˜ ๊ฒฝ์šฐ ํŽธํ•˜๊ฒŒ ์ž…๋ ฅํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ
click ๋™์ž‘ ์‹œ ํ•ด์•ผํ•  ์ผ๋“ค์ด ๋งŽ๋‹ค๋ฉด 1, 2๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค!

โœ… ๊ฐ„๋‹จํžˆ onClick์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋˜์—ˆ์œผ๋‹ˆ state ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด๋ณด๋„๋ก Click!!

โœ”๏ธ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ onClick 3๋ฒˆ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค

โœ”๏ธ 1,2,3๋ฒˆ ์ค‘ ์ œ๋Œ€๋กœ state๊ฐ’์ด ๋ณ€๊ฒฝ ๋˜๋Š” ๊ฑด 3๋ฒˆ!!

โŒ number ๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋์ด๋‹ˆ๊นŒ number ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ??

โœ”๏ธ state ๊ฐ’์€ ๋‘ ๋ฒˆ์งธ ๋ณ€์ˆ˜์˜€๋˜ setNumber์„ ํ†ตํ•ด์„œ ๋ณ€๊ฒฝ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

โœ… number ๊ฐ’์„ 7๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์–ด! ๐Ÿ‘‰ setNumber(7) (๊ด„ํ˜ธ ์•ˆ์— ๋ณ€๊ฒฝ ๊ฐ’์„ ์ž…๋ ฅ)

โœ”๏ธ 1,2๋ฒˆ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์—๋Ÿฌ!! ๋˜๋Š” ๋™์ž‘์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โœ”๏ธ 3๋ฒˆ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋ณ€๊ฒฝ! ํ™•์ธ์„ ์œ„ํ•ด 7, 0 ๋ฒ„ํŠผ 2๊ฐœ ์ƒ์„ฑ


โฌ†๏ธcodesandbox

๋ณ€๊ฒฝ๋œ ๊ฐ’์œผ๋กœ ๋‹ค์‹œ ๋ฐ”๊ฟ”์ค˜์•ผํ•˜์ง€๋งŒ
state๋Š” ๋ณ€๊ฒฝ๋œ ๊ฐ’์œผ๋กœ ๋‹ค์‹œ ๋ฐ”๊ฟ”์ฃผ์ง€ ์•Š๊ณ 
state ๊ฐ’๋งŒ ๋ณ€๊ฒฝ ํ•ด์ฃผ๋ฉด ์žฌ๋ Œ๋”๋ง(๋‹ค์‹œ ํ•œ๋ฒˆ return(๋‚ด์šฉ๋ฌผ : html ํƒœ๊ทธ๋“ค ์ •๋ณด)๋ฅผ ๊ทธ๋ ค์ค€๋‹ค )๋˜์–ด ๋ณ€๊ฒฝ๋œ ๊ฐ’์œผ๋กœ
์ œ๋Œ€๋กœ ๋…ธ์ถœ ๋˜๊ณ  ์žˆ๋Š” ์ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜

profile
๊ณต๋ถ€&๊ธฐ๋ก
post-custom-banner

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

comment-user-thumbnail
2023๋…„ 8์›” 11์ผ

์ด๋ ‡๊ฒŒ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ