[React] πŸ“– State둜 μ‚¬μš©μž μž…λ ₯ 관리

μ–Έμ§€Β·2024λ…„ 12μ›” 3일

React

λͺ©λ‘ 보기
10/13
post-thumbnail

πŸ“ Register μ»΄ν¬λ„ŒνŠΈ 생성

Register.jsx

const Register = () =>{
    return <div>register</div>;
};

export default Register;

App.jsx

import "./App.css";
import Register from "./components/Register";


function App() {
  return (
  <>
    <Register/>
  </>
  );
}

export default App;

πŸ“ Register μ»΄ν¬λ„ŒνŠΈμ—μ„œ κ°„λ‹¨ν•œ νšŒμ›κ°€μž… 폼 λ§Œλ“€κΈ°

ℹ️ νšŒμ›κ°€μž…μ„ μœ„ν•΄ ν•„μš”ν•œ 정보

  1. μ‚¬μš©μžμ˜ 이름
  2. 생년월일
  3. ꡭ적
  4. μžκΈ°μ†Œκ°œ

1. μ‚¬μš©μž 이름

πŸ“ onChangeName μ»΄ν¬λ„ŒνŠΈ 생성

const Register = () =>{
    const [name, setName] = useState(""); // ("") : 빈 λ¬Έμžμ—΄

    const onChangeName = (e) => {
        console.log(e);
    }
    
    return (
    <div>
        <input onChange={onChangeName} placeholder={"이름"}/>
    </div>)
};
  • input νƒœκ·Έμ•ˆμ— 이름 μž…λ ₯ μ‹œ 이벀트 ν•Έλ“€λŸ¬(onChange)κ°€ λ™μž‘λ˜μ–΄ 이벀트 ν•Έλ“€λŸ¬ μ•ˆμ— μžˆλŠ” μ»΄ν¬λ„ˆνŠΈ(onChangeName)κ°€ μ‹€ν–‰λœλ‹€.

❗️ logμ—μ„œ 확인할 수 μžˆλŠ” λ‚΄μš©
: input에 μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 값을 확인할 수 μžˆλ‹€.
➑️ 즉, input에 μ €μž₯λ˜μ–΄μžˆλŠ” 값이 Value에 λ³΄κ΄€λ˜μ–΄μžˆλ‹€.

❗️ onChange λž€?
: HTML 폼 μš”μ†Œμ—μ„œ μ‚¬μš©μžκ°€ μž…λ ₯값을 λ³€κ²½ν–ˆμ„ λ•Œ μ‹€ν–‰λ˜λŠ” React 이벀트
: 주둜 input, textarea, select λ“±μ˜ 값이 변경될 λ•Œ μ‚¬μš©

πŸ“ setName(e.target.value);

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

return (
	<div>
		<input onChange={onChangeName} placeholder={"이름"}/><br></br>
		{name}
	</div>
)

μ΄λ ‡κ²Œ μ €μž₯λ˜μ–΄ μžˆλŠ” 값을 setName에 λ„£μ–΄μ£Όλ©΄ μž…λ ₯ν•œ ν…μŠ€νŠΈλ₯Ό μ „λ‹¬ν•΄μ„œ μ΅œμ’…μ μœΌλ‘œ 이 name State에 μž…λ ₯ν•œ 값듀이 λ°”λ‘œλ°”λ‘œ μ €μž₯이 λœλ‹€.

πŸ“ μ΄ˆκΈ°κ°’ μ„€μ •

  • useState (""); μ•ˆμ— μ΄ˆκΈ°κ°’μ„ λ„£κ³  input νƒœκ·Έμ˜ 속성인 value에 {name} 을 λ„£μ–΄μ£Όλ©΄ μ΄ˆκΈ°κ°’ μ„€μ • μ™„λ£Œ
    ➑️ state κ°’μœΌλ‘œ μž…λ ₯ν•„λ“œμ˜ 값을 μ„€μ •
const Register = () =>{
    const [name, setName] = useState("이름");

    const onChangeName = (e) => {
        setName(e.target.value);
    }
    return (
    <div>
        <input value={name} 
        onChange={onChangeName} 
        placeholder={"이름"}/>
        <br></br>
        {name}
    </div>)
};

2. 생년월일

<input type="date" /> 

: date picker κ°€ λ Œλ”λ§λœλ‹€. (λ‹€λ₯Έ λΈŒλΌμš°μ €μ—μ„œλŠ” λ‹€λ₯΄κ²Œ λ Œλ”λ§μ΄ 될 μˆ˜λ„ μžˆλ‹€.)

πŸ“ onChangeBirth μ»΄ν¬λ„ŒνŠΈ 생성

const [birth, setBirth] = useState("");

const onChangeBirth = (e) => {
	setBirth(e.target.value);
}
return (
	<div>
		<div>
			<input value={name} 
			onChange={onChangeName} 
			placeholder={"이름"}/>
		</div>

		<div>
			<input type="date" value={birth} onChange={onChangeBirth}/> 
			{birth}
		</div>
	</div>
)

❗️ μ—¬κΈ°μ„œ λ‚΄ ꢁ금증 : birthλŠ” μ΄ˆκΈ°κ°’μ΄ μ—†λŠ”λ° value={birth}λ₯Ό λ°›λŠ”κ±°μ§€?]
: value 속성에 birth μƒνƒœλ₯Ό μ—°κ²°ν•˜λŠ” μ΄μœ λŠ” Reactμ—μ„œ 폼 μš”μ†Œμ˜ μƒνƒœμ™€ μ»΄ν¬λ„ŒνŠΈλ₯Ό 동기화(μ–‘λ°©ν–₯ 데이터 바인딩)ν•˜κΈ° μœ„ν•¨

  • μ–‘λ°©ν–₯ 데이터 바인딩 : μƒνƒœμ™€ μž…λ ₯ ν•„λ“œμ˜ 값이 μ„œλ‘œ 의쑴 관계λ₯Ό κ°€μ§€λŠ” 것
  • μ‚¬μš©μžκ°€ μž…λ ₯ν•„λ“œμ—μ„œ 값을 λ³€κ²½ν•˜λ©΄ μƒνƒœκ°€ μ—…λ°μ΄νŠΈλ˜κ³ , μƒνƒœκ°€ μ—…λ°μ΄νŠΈ 되면 μž…λ ₯ν•„λ“œμ˜ 값도 μžλ™μœΌλ‘œ 변경됨 ➑️ μž…λ ₯ ν•„λ“œμ˜ κ°’κ³Ό React μƒνƒœλ₯Ό μΌκ΄€λ˜κ²Œ μœ μ§€ν•  수 μžˆλ‹€.

❌ value 속성에 μƒνƒœλ₯Ό μ—°κ²°ν•˜μ§€μ•Šμ„ 경우

  • μž…λ ₯ν•„λ“œμ˜ 값은 React μƒνƒœμ™€ λ™κΈ°ν™”λ˜μ§€μ•ŠλŠ”λ‹€. ➑️ λΉ„μ œμ–΄ μ»΄ν¬λ„ŒνŠΈλ‘œ λ™μž‘
  • λΉ„μ œμ–΄ μ»΄ν¬λ„ŒνŠΈλŠ” 값을 λ‹€λ£°λ €λ©΄ μ°Έμ‘°(Ref)λ₯Ό μ‚¬μš©ν•˜κ±° 직접 DOM을 μ‘°μž‘ν•΄μ•Όν•˜λŠ”λ° 이 방법이 React μƒνƒœ 관리 방식과 λ§žμ§€μ•Šκ³ , μΆ”μ ν•˜κΈ° μ–΄λ €μš΄ μ½”λ“œκ°€ λœλ‹€

3. ꡭ적

: select λ°•μŠ€ μ‚¬μš©

⭐️ select-option
: option νƒœκ·Έ μ•ˆμ— 선택지λ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.
: select νƒœκ·ΈλŠ” 기본적으둜 optionλ“€ 쀑에 맨 μœ„μ— μžˆλŠ” μ˜΅μ…˜μ„ μ΄ˆκΈ°κ°’μœΌλ‘œ ν•œλ‹€.

<select>
	<option>-</option>
	<option>ν•œκ΅­</option>
	<option>λ―Έκ΅­</option>
	<option>영ꡭ</option>
</select>

πŸ“ onChangeCountry μ»΄ν¬λ„ŒνŠΈ 생성

const [country, setCountry] = useState("");

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

return (
	<div>
		<div>
			<input value={name} 
			onChange={onChangeName} 
			placeholder={"이름"}/>
		</div>

		<div>
			<input type="date" value={birth} onChange={onChangeBirth}/> 
			{birth}
		</div>

		<div>
			<select value={country} onChange={onChangeCountry}>
				<option>-</option>
				<option>ν•œκ΅­</option>
				<option>λ―Έκ΅­</option>
				<option>영ꡭ</option>
			</select>
			{country}
		</div>
	</div>
)

4. μžκΈ°μ†Œκ°œ

: textarea νƒœκ·Έ μ‚¬μš©

⭐️ Textarea νƒœκ·Έ
: input νƒœκ·Έμ™€ 달리 μ—¬λŸ¬ μ€„μ˜ μž…λ ₯을 받을 수 μžˆλŠ” νƒœκ·Έμ΄λ‹€.
: ν•˜μ§€λ§Œ input νƒœκ·Έμ™€ λ™μΌν•˜κ²Œ λ™μž‘ν•œλ‹€.

πŸ“ onChangeBio μ»΄ν¬λ„ŒνŠΈ 생성

const [bio, setBio] = useState("");

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

return (
	<div>
		<div>
			<input value={name} 
			onChange={onChangeName} 
			placeholder={"이름"}/>
		</div>

		<div>
			<input type="date" value={birth} onChange={onChangeBirth}/> 
			{birth}
		</div>

		<div>
			<select value={country} onChange={onChangeCountry}>
				<option>-</option>
				<option>ν•œκ΅­</option>
				<option>λ―Έκ΅­</option>
				<option>영ꡭ</option>
			</select>
			{country}
		</div>
        
        <div>
			<textarea value={bio} onChange={onChangeBio}/>
			{bio}
        </div>
	</div>
)

0개의 λŒ“κΈ€