관련된 예시 코드를 보고, 리액트에서 form과 input에 대해 알아두면 좋을 특성들을 정리해보고자 합니다.
import React , { useState } from 'react';
const Form = (props) => {
const [info,setInfo]=useState({
name:'merry',
phone:'010-6666-2222'
});
const onChange = (e) => {
e.preventDefault();
setInfo(info => {
const updated = {
...info,
[e.target.name]: e.target.value
};
return updated;
});
};
return(
<form>
<input
type="text"
name="name"
value={info.name}
onChange={onChange}
/>
<input
type="text"
name="phone"
value={info.phone}
onChange={onChange}
/>
</form>
);
}
form
안에 여러가지 요소가 들어있을 땐 name
속성을 부여해 각각을 구분할 수 있도록 한다. 이는 event.target.name
으로 조회 가능하다.
value
속성을 통해 값을 부여한 경우, 타이핑을 해도 업데이트 되지 않으므로 onChange
를 통해 업데이트 함수를 지정한다.
onchange
이벤트는 input
, select
, textarea
요소에서 발생한다. input 이벤트와 달리 요소 값 각각의 모든 변경마다 반드시 발생하지는 않다.
input
에서는 onChange
가 텍스트값이 바뀔 때마다 발생한다.
onChange
와 onSubmit
에서의 event.preventDefault
는 페이지가 리로딩되는 액션을 못하게 한다.
form
은 controlled components 중 하나로, (순수 HTML input에서 사용자가 자유롭게 입력한 데이터를 submit 같은 특정 이벤트가 발생했을 때 입력받은 데이터에 접근하는 방식과는 다르게) 리액트 form
에서는 컴포넌트 안 state
데이터가 사용자가 화면에 보고 있는 데이터와 동일하도록 만드는 것을 권장한다.
form
은 입력할 때 마다 특정 부분이 리렌더링 되어도 리액트 자체적으로 효율적이게 DOM을 없데이트 해주기 때문에 성능은 크게 걱정하지 않아도 된다.