아래 예시 반드시 익힐것. 복잡하지만 차근차근 짚어가면서 해석해야한다. state인 inputs는 객체이며 두개의 키인 '이름',과 'nickname'을 갖는다(주석1참고).
주목할 것이 onChange함수 안에 있는 주석3에서 e.target하여 value와 name을 구조분해 하여 취하고 있는데 여기서의 value, name은 input태그의 속성인 value와 name이다. 즉 input태그의 value, name의 값으로 input창에 무언가를 입력하면 그것이 속성value의 값이 되는 것이고 애초에 name의 값은 이미 주워져 있다(이름을 익력하는 input창인 경우 name="이름"이라고 애초에 주워진다).
이름 input창에 글씨를 입력하면 그 순간 onChange함수가 실행되고 onChange함수 안에 setInputs가 실행되어 주석 2와 같이 inputs state의 값이 변함과 동시에 리랜더링이 진행되어 주석1의 이름과 nickname의 값에 그 변화가 반영된다. 그리고 마저 리랜더링 되는 과정에서 이름관련 input태그의 value속성의 값에 주석4와 같이 변화가 반영되고 nickname관련 input태그의 value속성의 값에 주석5와 같이 변화가 반영된다.
importReact, { useState, useRef } from"react";
constInputSample= () => {
const [inputs, setInputs] =useState({
이름:"",
nickname:"",
});
constnameFocus=useRef();
const { 이름, nickname } =inputs;//1
constonChange= (e) => {
/**
* 대상(target)은 onChange를 onChange속성의 값으로 둔 input태그이다. input태그는 value속성과 name속성 이외에도 placeholder속성등을 갖는다.
* 따라서, 구조분해 할당을 써서e.target이 가지는 키 중에서 필요한 키인 value와 name의 값만 가져온 것이 아래 코드이다. 즉, 태그의 속성은 모두 실질적인 중요한 기능을 한다!
*/
const { value, name } =e.target; //3 e.target을 하여onChange함수가 onChange속성의값으로 있는input태그의 value, name속성의 값을 가져온다.
// console.log(value, name, e.target);
setInputs({
...inputs,
[name]:value,//2
});
console.log(inputs);
};
constonReset= () => {
setInputs({
이름:"",
nickname:"",
});
nameFocus.current.focus();
};
return (
<div>
<input
name="이름"
placeholder="이름을 입력하세요"
onChange={onChange}
value={이름} //4
ref={nameFocus}
/>
<input
name="nickname"
placeholder="닉네임을 입력하세요"
onChange={onChange}
value={nickname} //5
/>
<buttononClick={onReset}>초기화</button>
<div>
<b>값:</b>
{이름}({nickname})
</div>
</div>
);
};
exportdefaultInputSample;
아래 코드는 윗코드를 응용하여 이름과 닉네임을 각각 입력하고 초기화 버튼을 누르면 2개의 input창은 비워지고 그동안 입력했던 이름과 별명들이 input창 아래에 순서대로 그려지도록 하였다.
importReact, { useState, useRef } from"react";
constInputSample= () => {
const [inputs, setInputs] =useState({
이름:"",
nickname:"",
});
const [store, setStore]=useState([]);
constnameFocus=useRef();
const { 이름, nickname } =inputs;//1
constonChange= (e) => {
/**
* 대상(target)은 onChange를 onChange속성의 값으로 둔 input태그이다. input태그는 value속성과 name속성 이외에도 placeholder속성등을 갖는다.
* 따라서, 구조분해 할당을 써서e.target이 가지는 키 중에서 필요한 키인 value와 name의 값만 가져온 것이 아래 코드이다. 즉, 태그의 속성은 모두 실질적인 중요한 기능을 한다!