여러개의 Input 상태 관리하기

작업
...문법
React는새로운객체를생성해준후 업데이트
import {useState}
useRef
const 변수명 = useRef();
변수명.current.focus();
진행 상태
완료
진행일시
2021/11/26
학습자

[ 여러 개의 Input 상태 일 때 ]

Input의 갯수가 한개가 아닌 여러개일 때 어떻게해야하는지 한번 알아보자
Input의 개수가 여러개일 때는 input에 name을 설정하고 이벤트가 발생했을 때 이 값을 참조하는것이다. 그리고 useState에서는 문자열이 아니라 객체형태의 상태를 관리해줘야한다.
React에서 객체를 수정해야할 때는 직접수정을 하면안되고 새로운 객체를 만들어서 새로운 객체의 변화를 주고 이를 상태로 사용해줘야한다.
setInputs({ ...inputs, [name]: value });
JavaScript
복사
...문법은 spread문법이다 → 객체의 내용을 모두 "펼쳐서" 기존 객체를 복사한다는 의미
이러한 작업은 '불변성을 지켜줌'
불변성을 지켜줘야 React 컴포넌트에서 상태가 업데이트를 감지, 이에 따라 필요한 리렌더링을 진행
import React,{useState, useRef} from 'react'; function InputSample2() { //기존값, 변하는값 설정 const [Inputs, setInputs] = useState({ name : '', nickname : '' }); const {name, nickname} = Inputs; //비구조화 할당을 통해 값 추출 const onChange = (e) => { const {name, value} = e.target; // 우선 e.target에서 name과 value 추출 setInputs({ //React에서는 반드시 원본을 업데이트쳐주는게아니라 기존정보를 복사해갖고 그거를 업데이트 //해줘야한다. ...Inputs, //1.복사해주기 [name] : value //2.name을 가지고있는 변수에 value를 저장한다. }); }; const nameInput = useRef(); const onReset = () =>{ setInputs({ name : '', nickname : '', }) nameInput.current.focus() }; return ( <div> <input name="name" placeholder="이름을 입력해주세요" onChange={onChange} value={name} /> <input name="nickname" placeholder="닉네임을 입력해주세요" onChange={onChange} value={nickname} ref={nameInput} /> <button onClick={onReset}>초기화</button> <div> <b>:{name}({nickname})</b> </div> </div> ) } export default InputSample2;
JavaScript
복사