티스토리 뷰

<div>
      <input name="one" placeholder="one" onChange={onChange} value={one} />
      <input name="two" placeholder="two" onChange={onChange} value={two} />
      <input name="three" placeholder="three" onChange={onChange} value={three} />
      <button onClick={onReset}>초기화</button>
      <div>
        <p>
          1번 인풋 값 : {one}, 2번 인풋 값 : {two}, 3번 인풋 값 : {three}
        </p>
      </div>
    </div>

위와같은경우

인풋 각각 state 를 줘서 처리할 수도 있지만 아래와 같은 방법이 더 효율적이다.

우선 위와같이 각 인풋에 name 값을 주고 고유의 이름을 붙여 준다.

 

그리고 

  const [inputs, setInputs] = useState({
    one: "",
    two: "",
    three: ""
  });

  const { one, two, three } = inputs;

useState를 각 이름별로 객체로 설정한뒤,

구조분해할당으로 각 값을 꺼낸다.

 

이후 맨 위처럼 input 의 value에 각 state를 넣어주고

onChange 이벤트를 설정해준다.

 

인풋이 하나만 있을때는

event.target.value 를 setInputs에 넣어주면 끝이었지만,

인풋이 여러개일때는 아까 설정해놓은 name 값을 사용한다.

 

  const onChange = e => {
    const { name, value } = e.target; //1번
    
   
    setInputs({       		//2번
      ...inputs,
      [name]: value
    });
  };

1번처럼 e.target 를 구조분해할당하여 이벤트가 일어난 인풋안에서

name과 value를 꺼내고,

 

setInputs으로 state를 수정할때에는

2번처럼 안쪽에서 스프레드를 이용하여 기존 객체들을 가져온뒤

[name] 을 이용하여 해당 객체를 수정해 준다.

 

대괄호를 이용하여 객체를 수정하는건 아래의 예시를 참고하면 된다.

그러하다.

'Study > react.js' 카테고리의 다른 글

[노드패키지매니져]npm 과 npx 의 차이점  (0) 2020.01.27
[react]useRef 사용  (0) 2020.01.14
[react Hooks] use Input  (0) 2020.01.13
[react router]리액트 라우터  (0) 2020.01.07
useEffect 변화의 감지  (0) 2019.12.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함