리액트 9 - 폼

A·2022년 3월 10일
0

React

목록 보기
9/12

오늘 알아볼 것

form은 사용자로부터 데이터를 입력받기 위해 필요한 기능이다. 사용자가 form에 입력한 데이터에 접근하도록 하는 것을 제어 컴포넌트라 한다.

제어 컴포넌트
input, textarea, select와 같은 폼 엘리먼트는 일반적으로 state로 관리하고 업데이트 한다.
React 컴포넌트는 폼에 발생하는 사용자 입력값을 제어한다.

ex)

const FormEditor = () =>{

	const[name, setName]= useState(""); 
	const[content, setContent]= useState(""); 
	const [alpa, setAlpa] = useState("A");
	
	
	const handleSubmit = (e) =>{
		alert(name + "이 말했다. " + content + alpa + "라고..");
		e.preventDefault();
	}
	return (
		<>
			<form onSubmit={handleSubmit}>
				<label>이름 :
					<input type="text" value={name} onChange={(e)=>setName(e.target.value)}/>
				</label>
			<br/>
				<textarea value={content} onChange={(e)=>setContent(e.target.value)}/>
			<br/>
				<select value={alpa} onChange={(e) => {setAlpa(e.target.value);}} >
					<option value="A">A</option>
					<option value="B">B</option>
					<option value="C">C</option>
				</select>
				
				<button>입력</button>
			</form>
	</>
	);
	
}

다중 입력 제어하기
각 엘리먼트에 name 어트리뷰트를 추가하고, 이를 통해 어떤 작업을 할지 선택할 수 있게 한다.

const [state, setState] = useState({
	name:"",
	content:"",
	alpa:"A",
})


const handleSubmit = (e) =>{
	alert(name + "이 말했다. " + content + alpa + "라고..");
	e.preventDefault();
}

const handleChangeState = (e)=>{
	setState({
		…state,
		[e.target.name]: e.target.value,
	});
}

return (
	<>
		<form onSubmit={handleSubmit}>
			<label>이름 :
				<input name="name" type="text" value={state.name} onChange={handleChangeState}/>
			</label>
		<br/>
			<textarea name="content"  value={state.content} onChange={handleChangeState}/>
		<br/>
			<select name="alpa" value={state.alpa} onChange={handleChangeState} >
				<option value="A">A</option>
				<option value="B">B</option>
				<option value="C">C</option>
			</select>
			
			<button>입력</button>
		</form>
</>
);

제어 컴포넌트와 비제어 컴포넌트

제어 컴포넌트는 사용자가 입력을 할때마다 렌더링하지만 비제어 컴포넌트는 사용자가 제출 등의 액션을 하기 전에는 리렌더링이나 동기화를 시키지 않는다.

profile
프론트엔드 개발자는 안하기로 했어요

0개의 댓글

관련 채용 정보