[React] ๐Ÿ“– State๋กœ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ด€๋ฆฌํ•˜๊ธฐ - ์‹ฌํ™”

์–ธ์ง€ยท2024๋…„ 12์›” 27์ผ

React

๋ชฉ๋ก ๋ณด๊ธฐ
11/13
post-thumbnail

โ—๏ธ ์ด์ „ํฌ์ŠคํŒ…์— ์žˆ๋Š” ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์•Œ์•„๋ณด๊ธฐ!

๐Ÿ“ ๋ถ„๋ฆฌ๋œ state ๊ฐ’์„ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ธฐ

// Register.jsx

const [name, setName] = useState("์ด๋ฆ„");
const [birth, setBirth] = useState("");
const [country, setCountry] = useState("");
const [bio, setBio] = useState("");

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•œ State๋ฅผ ํ•œ๋ฒˆ์— ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง€์šฐ๊ณ 

// Register.jsx

const [input, setInput] = useState({
	name:"",	โžก๏ธ name property
	birth:"",	โžก๏ธ birth property
	country:"",	โžก๏ธ country property
	bio:""		โžก๏ธ bio property
})

useState ์•ˆ์— ์ง€์› ๋˜ State๋ฅผ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  onChange๋กœ ์„ค์ •ํ–ˆ๋˜ ๊ฒƒ๋“ค์„ ๋‹ค ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š”๋ฐ

const onChangeName = (e) => {
        setName(e.target.value);
    }

    const onChangeBirth = (e) => {
        setBirth(e.target.value);
    }

    const onChangeCountry = (e) => {
        setCountry(e.target.value);
    }

    const onChangeBio= (e) => {
        setBio(e.target.value);
    }

setName, setBirth, setCountry, setBio ๋ผ๋Š” ํ•จ์ˆ˜๋Š” ๋”์ด์ƒ ์กด์žฌํ•˜์ง€์•Š์œผ๋‹ˆ ์ง€์›Œ์ฃผ๊ณ 

const onChangeName = (e) => {
	setInput({
		...input,
		name : e.target.value
	})
}

const onChangeBirth = (e) => {
	setInput({
		...input,
		birth : e.target.value
	})
}

const onChangeCountry = (e) => {
	setInput({
		...input,
		country : e.target.value
	})
}

const onChangeBio= (e) => {
	setInput({
		...input,
		bio : e.target.value
	})
}
  • ...input : spread ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด์„œ ๊ธฐ์กด์˜ ์ด input state์— ๋“ค์–ด์žˆ๋Š” property ๊ฐ’๋“ค์„(name์„ ์ œ์™ธํ•œ property๊ฐ’๋“ค) ์œ ์ง€๋˜๊ฒŒ ํ•ด์ค€๋‹ค.
    โžก๏ธ ํ˜„์žฌ ํ•จ์ˆ˜๋Š” ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ์ด๋ฆ„ ๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ƒ์ผ, ๊ตญ์ , ์ž๊ธฐ์†Œ๊ฐœ ๊ฐ’๋“ค์€ ๋ณ€๊ฒฝ๋˜๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    โžก๏ธ ...input๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด name์— ๋Œ€ํ•œ ๊ฐ’๋งŒ ๋ฐ”๋€Œ๊ณ  ์ƒ์ผ, ๊ตญ์ , ์ž๊ธฐ์†Œ๊ฐœ ๊ฐ’์ด ์‚ฌ๋ผ์ง„๋‹ค.

๐Ÿ“ input ํƒœ๊ทธ๋“ค์˜ value ์†์„ฑ ๋ฐ”๊พธ๊ธฐ

๋”์ด์ƒ name, birth, countr, bio ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ value ์•ˆ์˜ ๊ฐ’์„ input.์„ ๋ถ™์—ฌ์„œ ๋ฐ”๊ฟ”์ค€๋‹ค.

return (
	<div>
		{/* ์ด๋ฆ„ */}
		<div>
			<input value={input.name} โ—๏ธ
				onChange={onChangeName} 
                placeholder={"์ด๋ฆ„"}/>
		</div>
            
		{/* ์ƒ๋…„์›”์ผ */}
		<div>
			<input type="date" value={input.birth} onChange={onChangeBirth}/> โ—๏ธ
		</div>

		{/* ๊ตญ์  */}
		<div>
			<select value={input.country} onChange={onChangeCountry}>โ—๏ธ
              <option>-</option>
              <option>ํ•œ๊ตญ</option>
              <option>๋ฏธ๊ตญ</option>
              <option>์˜๊ตญ</option>
          </select>
      </div>

      {/* ์ž๊ธฐ์†Œ๊ฐœ */}
      <div>
          <textarea value={input.bio} onChange={onChangeBio}/>โ—๏ธ
      </div>
	</div>
)

๐Ÿ“ Reguster ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ๊ฐ’ ๋ณ€๊ฒฝ ํ™•์ธ

  • ์ฒ˜์Œ์—๋Š” ๊ธฐ๋ณธ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.
    {name: '', birth: '', country: '', bio: ''}
  • ...input ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ์ž…๋ ฅํ•œ property ๊ฐ’๋งŒ ๋ณ€๊ฒฝ๋˜๊ณ  ๋‚˜๋จธ์ง€ property ๊ฐ’์€ ๋ณ€๊ฒฝ๋˜์ง€์•Š๊ณ  ์œ ์ง€๋œ๋‹ค.

๐Ÿ“ ๋ถ„๋ฆฌ๋œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•˜๋‚˜๋กœ ๋ญ‰์น˜๊ธฐ

const onChange = (e) =>{
	setInput({
		...input,
		[e.target.name] : e.target.value,
	})
}

์ด๊ฒŒ ๋จผ ์†Œ๋ฆฌ์•ผ ํ•˜๊ณ  ๊ฐ•์˜๋ฅผ ๊ณ„์† ๋”ฐ๋ผํ–ˆ๋”๋‹ˆ

return (
	<div>
		{/* ์ด๋ฆ„ */}
		<div>
			<input 
			name="name"	โ—๏ธ
			value={input.name} 
			onChange={onChange} 
			placeholder={"์ด๋ฆ„"}/>
		</div>
            
		{/* ์ƒ๋…„์›”์ผ */}
		<div>
			<input 
			name="birth" โ—๏ธ
			type="date" 
			value={input.birth} 
			onChange={onChange}/> 
		</div>
		
		{/* ๊ตญ์  */}
		<div>
			<select 
			name="country" โ—๏ธ
			value={input.country} 
			onChange={onChange}>
				<option>-</option>
				<option>ํ•œ๊ตญ</option>
				<option>๋ฏธ๊ตญ</option>
				<option>์˜๊ตญ</option>
			</select>
		</div>

		{/* ์ž๊ธฐ์†Œ๊ฐœ */}
		<div>
			<textarea 
			name="bio" โ—๏ธ
			value={input.bio} 
			onChange={onChange}/>
		</div>
	</div>
)

input ํƒœ๊ทธ์— name ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋‹ˆ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ–ˆ๋‹ค.
[e.target.name] : e.target.value
์„ ํƒํ•œ input ํƒœ๊ทธ์˜ name ์†์„ฑ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ณ€๊ฒฝ๋œ ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š”๊ฑฐ์˜€๋‹ค.
์•ฝ๊ฐ„ birth : e.target.value ์ด๊ฑฐ๋ž‘ ๊ฐ™์€ ์˜๋ฏธ์ธ๋ฐ ์ด๊ฒŒ input ํƒœ๊ทธ์˜ name ์†์„ฑ์œผ๋กœ ๋ณ€๊ฒฝ๋œ๊ฑฐ์ž–์•„.

  • [e.target.name] ์—ฌ๊ธฐ ์•ˆ์—๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ํƒœ๊ทธ์˜ name ์†์„ฑ์— ์„ค์ •๋œ ๊ฐ’์ด ๋“ค์–ด๊ฐ€์žˆ๋‹ค.

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