[๐Ÿ’ŽReact] JSX, state

h-a-n-aยท2023๋…„ 3์›” 1์ผ
1

๐Ÿ’ŽReact

๋ชฉ๋ก ๋ณด๊ธฐ
2/14

๋ฆฌ์•กํŠธ ์„ค์น˜

yarn

ํŽ˜์ด์Šค๋ถ์ด ๊ฐœ๋ฐœํ•œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋กœ, npm๊ณผ๋Š” ๋˜๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์ด๋‹ค. ๋ฆฌ์•กํŠธ์˜ ๋Œ€๋ถ€๋ถ„์€ yarn์„ ํ† ๋Œ€๋กœ ๊ฐœ๋ฐœ์ด ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ์Œ.

vite

๋นŒ๋“œ ์†๋„๊ฐ€ ๋น ๋ฅธ vite๋Š” esbuild๋ผ๋Š” ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ธฐ์กด์˜ ๋ฐฉ์‹์— ๋น„ํ•ด ํ›จ์”ฌ ๋” ๋น ๋ฅธ ๋ฒˆ๋“ค๋ง ์†๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
yarn create vite (์•ฑ์ด๋ฆ„) --template react ๋ผ๋Š” ๋ช…๋ น์–ด๋กœ ์‹œ์ž‘!
์ฃผ์˜:: ์•ฑ์ด๋ฆ„ ์•ˆ์—์„œ yarn ์‹œ์ž‘ํ•ด์•ผ ํ•จ! ํด๋”๋ช… ์ž˜ ํ™•์ธํ•˜๋„๋ก!

๋ฒ ๋ฆฌ๊ตฟ.

JSX

react์—์„œ ์“ฐ์ด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ™•์žฅ ๋ฌธ๋ฒ•, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š ๋ฌธ๋ฒ•์ด๋‹ค. html์ฝ”๋“œ๋Š” Html ํŒŒ์ผ ์•ˆ์—, js ์ฝ”๋“œ๋Š” js ํŒŒ์ผ์•ˆ์— ์“ฐ๋˜ ์ด์ „๊ณผ ๋‹ค๋ฅด๊ฒŒ, ์ด์ œ๋Š” js ํŒŒ์ผ ์•ˆ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ html ๋ชจ๋‘๋ฅผ ์Šฌ ์ˆ˜ ์žˆ๋‹ค!

์‚ฌ์šฉ๋ฒ•

  1. return () ์•ˆ์— ์ „์ฒด๋ฅผ ๊ฐ์‹ธ๋Š” ๋ถ€๋ชจํƒœ๊ทธ๊ฐ€ ํ•˜๋‚˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    ๋ฐ˜๋“œ์‹œ <div></div> ์•„๋‹ˆ๋ผ <></> ๊ฐ™์ด ๋นˆํƒœ๊ทธ์—ฌ๋„ ๊ฐ€๋Šฅ.
  2. jsx ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ถ€๋ถ„์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๋ฅผ ์“ธ ๋•Œ๋Š” {}๊ธฐํ˜ธ๋ฅผ ์“ด๋‹ค.
function App(){
const name='์ดํ˜œ์›'

return (
 <div>{name}</div>
 )
}
  1. jsx ๋‚ด๋ถ€์—์„œ html ํƒœ๊ทธ์š”์†Œ์— class๋ฅผ ์ฃผ๊ณ ์‹ถ์„ ๋•Œ๋Š” className์„ ์“ด๋‹ค
function App(){
return (
 <div className="App">
 </div>
 )
}
export default App;
  1. ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” camelCase๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹จ, ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ• ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ์ฒซ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•œ๋‹ค.

state

์šฉ๋„

์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ณ€์ˆ˜๋ง๊ณ  state์— ๋‹ด๋Š”๋‹ค.
์ƒ๊ฐํ•ด๋ณด๋ฉด ๋ณ€์ˆ˜์— ๋‹ด์œผ๋‚˜ state์— ๋‹ด์œผ๋‚˜ ๊ทธ๊ฒŒ ๊ทธ๊ฑฐ ๊ฐ™์€๋ฐ ์™œ state๋ฅผ ์“ฐ๋Š”๊ฑธ๊นŒ?
state๋Š” ๋ณ€๋™์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋ฉด state๋ฅผ ์“ฐ๋Š” html๋„ ์ž๋™์œผ๋กœ ์žฌ๋ Œ๋”๋งํ•ด์ค€๋‹ค.
๊ฒฐ๋ก  : ์ด์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋˜๋Š” ๊ฐ’์ด ์ƒํ˜ธ์ž‘์šฉ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” useState ๊ฐ€ ๊ผญ ํ•„์š”ํ•˜๋‹ค!
๊ฐœ๋ฐœ์ž์—๊ฒŒ๋„ ๊ทธ๋ƒฅ ์Œฉ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€์ˆ˜์— ๋‹ด์•„๋†จ์œผ๋ฉด "๋ณ€์ˆ˜์— ๋‹ด์•„๋†“์€ ๋‚ด์šฉ ๋ฐ”๋€Œ์—ˆ์œผ๋‹ˆ, html๋„ ๊ณ ์ณ๋‹ฌ๋ผ"๊ณ  ์ฝ”๋“œ๋ฅผ ์งฐ์–ด์•ผํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ ๊ฒƒ!!

state์— ๋‹ด๋Š”๋ฒ•

  1. import {useState} from 'react'
  2. let [a,b] = useState(a์˜ ์ดˆ๊ธฐ๊ฐ’)
    a์ž๋ฆฌ์— ๋ณด๊ด€ํ•  state์ด๋ฆ„์„ ์ž์œ ๋กญ๊ฒŒ ์ž‘๋ช…ํ•œ ๋‹ค์Œ ๋‚˜์ค‘์— ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

๊ฒฐ๋ก ! ์ž์ฃผ ๋ณ€๊ฒฝํ•  ๊ฒƒ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋“ค์€ state๋“ค์€ html์— {๋ฐ์ดํ„ฐ๋ฐ”์ธ๋”ฉ}ํ•ด๋‘๊ธฐ
๊ตณ์ด ๋ณ€๊ฒฝํ•  ์ผ์ด ์—†๋Š”๊ฑด ์ผ๋ฐ˜ ๋ณ€์ˆ˜์— ์ €์žฅํ•ด๋„ ๋œ๋‹ค!

์—ฐ์Šต

state ์ƒ์„ฑ, {๋ฐ์ดํ„ฐ๋ฐ”์ธ๋”ฉ} ๐Ÿ‘‡

import "./App.css";
import {useState} from "react";

function App(){
	let [์ปคํ”ผ,์ปคํ”ผ๋ณ€๊ฒฝ]=useState('์•„๋ฉ”๋ฆฌ์นด๋…ธ')
 	
    return (
      <div className="App">
      	<h4>{์ปคํ”ผ}</h4> 
	 </div>
	)
}
export default App;

ํ•„์š”ํ•œ๋งŒํผ state ์ƒ์„ฑ ๐Ÿ‘‡

import "./App.css";
import {useState} from "react";

function App(){
	let [์ปคํ”ผ,์ปคํ”ผ๋ณ€๊ฒฝ]=useState('์•„๋ฉ”๋ฆฌ์นด๋…ธ')
 	let [์ปคํ”ผ2,์ปคํ”ผ๋ณ€๊ฒฝ2]=useState('์นดํŽ˜๋ผ๋–ผ')

    return (
      <div className="App">
      	<h4>{์ปคํ”ผ}</h4>
        <h4>{์ปคํ”ผ2}</h4>
	 </div>
	)
}
export default App;

๋ฐฐ์—ด destructuring ๐Ÿ‘‡

import "./App.css";
import {useState} from "react";

function App(){
	let [์ปคํ”ผ,์ปคํ”ผ๋ณ€๊ฒฝ]=useState(['์•„๋ฉ”๋ฆฌ์นด๋…ธ','์นดํŽ˜๋ผ๋–ผ'])

    return (
      <div className="App">
      	<h4>{์ปคํ”ผ[0]}</h4>
        <h4>{์ปคํ”ผ[1]}</h4>
	 </div>
	)
}
export default App;

onClick

onClick={} ์ด๋ ‡๊ฒŒ C๋Š” ๋Œ€๋ฌธ์ž๋กœ ์“ฐ๊ณ , {}์„ ์‚ฌ์šฉํ•ด {} ์•ˆ์— ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

์—ฐ์Šต

function App(){
	let [์ข‹์•„์š”]=useState(0)
	function ์ข‹์•„์š”๋ณ€๊ฒฝ(){
    console.log(1)}
    return (
    <div>
     <div onClick={์ข‹์•„์š”๋ณ€๊ฒฝ}>{์ข‹์•„์š”}</div>
     // ์•„๋‹ˆ๋ฉด ์œ„์—์„œ ํ•จ์ˆ˜ ๋งŒ๋“ค ํ•„์š” ์—†์ด
     // ๋ฐ”๋กœ ์ด ์•ˆ์—์„œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ๋„ ๊ฐ€๋Šฅ!
     // onClick={()=>{console.log(1)}}
    </div>
    )
  }

state ๋ณ€๊ฒฝํ•˜๋Š” ๋ฒ• : state ๋ณ€๊ฒฝํ•จ์ˆ˜

let [๋ณด๊ด€ํ•  state์ด๋ฆ„, state๋ณ€๊ฒฝํ•จ์ˆ˜์ด๋ฆ„]=useState('๋ณด๊ด€ํ•  ์ž๋ฃŒ')
state๋ณ€๊ฒฝํ•จ์ˆ˜์ด๋ฆ„(์ƒˆ๋กœ์šดstate)
state ๋ณ€๊ฒฝํ•จ์ˆ˜๋Š” ()์•ˆ์— ๋„ฃ์€ ๊ฑธ๋กœ state๋ฅผ ๊ฐˆ์•„์น˜์›Œ์ค€๋‹ค.

์—ฐ์Šต

state๋ฅผ ์ด์šฉํ•ด ๋ˆ„๋ฅผ๋•Œ ์ˆซ์ž๊ฐ€ 1๋กœ ๋ณ€๊ฒฝ๋˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์„๋•Œ

let [์ข‹์•„์š”,์ข‹์•„์š”๋ณ€๊ฒฝ]=useState(0)

<div onClick={()=>{์ข‹์•„์š”๋ณ€๊ฒฝ(1)}}>{์ข‹์•„์š”}</div>
// onClick={์ข‹์•„์š”๋ณ€๊ฒฝ(1)} ์ด๋ ‡๊ฒŒ ์ ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ํ•จ์ˆ˜ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— stateํ•จ์ˆ˜ ์ ๊ธฐ

๋ˆ„๋ฅผ๋•Œ๋งˆ๋‹ค 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด

<div onClick={()=>{์ข‹์•„์š”๋ณ€๊ฒฝ(์ข‹์•„์š”+1)}}{์ข‹์•„์š”}</div>

์œ„์—์„œ ๊ณต๋ถ€ํ–ˆ๋˜ ๋ฐฐ์—ด destructuring์ด๋ž‘ state ๊ฒฐํ•ฉ์‹œ์ผœ๋ณด๊ธฐ!

function App(){
	let [์ปคํ”ผ,์ปคํ”ผ๋ณ€๊ฒฝ]=useState(['์•„๋ฉ”๋ฆฌ์นด๋…ธ','์นดํŽ˜๋ผ๋–ผ'])

    return (
      <div className="App">
      	<button onClick={()=>{์ปคํ”ผ๋ณ€๊ฒฝ(['์—์Šคํ”„๋ ˆ์†Œ','์นดํŽ˜๋ผ๋–ผ'])}}>๋ˆ„๋ฅด๋ฉด ์ปคํ”ผ๋ณ€๊ฒฝ๋จ</button>
      	<h4>{์ปคํ”ผ[0]}</h4>
        <h4>{์ปคํ”ผ[1]}</h4>
	 </div>
	)
}

state๋ฅผ ํ†ต์งธ๋กœ ๊ฐˆ์•„์—Ž๊ธฐ ๋•Œ๋ฌธ์— <button onClick={()=>{์ปคํ”ผ๋ณ€๊ฒฝ(['์—์Šคํ”„๋ ˆ์†Œ'])}}> ๋งŒ ์“ฐ๋ฉด ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋Š” ์ˆœ๊ฐ„ ์นดํŽ˜๋ผ๋–ผ๋Š” ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๋Š” ๋งค์ง์„ ๋ณด๊ฒŒ ๋œ๋‹ค....

์ •๋ฆฌ
1. ํด๋ฆญ์‹œ ๋ญ”๊ฐ€ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์œผ๋ฉด onClick={()=>{}} ํ˜น์€ onClick={ํ•จ์ˆ˜๋ช…} ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ
2. state ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด state๋ณ€๊ฒฝํ•จ์ˆ˜ ์ด์šฉํ•˜๊ธฐ
state๋ณ€๊ฒฝํ•จ์ˆ˜์˜ () ๊ด„ํ˜ธ ์•ˆ์— ์žˆ๋Š” ๊ฑธ๋กœ ์ „์ฒด ์‹น ๋‹ค ๊ฐˆ์•„์—Ž์–ด๋ฒ„๋ฆผ


  • ์˜ค๋Š˜ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ๊ฒƒ
    ๋ฆฌ์•กํŠธ๋Š” ์žฌ๋ Œ๋”๋ง์˜ ํŽธ๋ฆฌํ•จ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
    ๋ฆฌ์•กํŠธ๋Š” jsx๋ผ๋Š” ํŠน์ดํ•œ ๋ฌธ๋ฒ•์„ ์“ด๋‹ค.
  • ์˜ค๋Š˜ ๊ถ๊ธˆํ–ˆ๊ฑฐ๋‚˜ ๋” ์•Œ๊ณ  ์‹ถ์€ ๊ฒƒ
    ์•„๋‹ˆ ๋‚˜ ๊ทผ๋ฐ ์•„์ง๋„ export default ์ž˜ ๋ชจ๋ฅด๋„ค...์ด๊ฑฐ ๋‹ค์‹œ ๊ณต๋ถ€ํ•ด์•ผ๊ฒŒ๋”ฐ
  • ์˜ค๋Š˜์˜ ์†Œ๊ฐ
    ๋ฐฐ์šธ ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์•„์„œ ์‹ ๋‚œ๋‹ค. ์•„์‹ธ๊ฐ€์˜ค๋ฆฌ

23.03.11 import/export ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ
profile
ํ•˜๋ฃจํ•˜๋ฃจ๊ฐ€ ์—ฐ์Šต์ด๋‹ˆ ๋‚ด์ผ์€ ๋” ๊ฐ•ํ•ด์งˆ ๊ฒ๋‹ˆ๋‹ค

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