React

React - input 사용하기

Starters 2020. 9. 8. 19:28

 - App.js -

import React from 'react';
import InputSample from './InputSample';

function App() {
  return (
    <InputSample />
  );
}

export default App;

 

이벤트 함수 생성

- InputSample.js -

function InputSample(){
  const onChange() = (e) => {
    console.log(e.target);
  }
  return (
    <div>
    
    ....

e 는 아래 코드에서 어떤 이벤트가 생성될 때, 이벤트에 대한 내용이 담기는 객체이다.

e.target은 이벤트가 발생한 DOM에 대한 내용을 담고 있다.

e.target.value 현재 발생하는 이벤트의 구체적인 값을 담고 있음

 

import React, { useState } from 'react';

function InputSample(){
  const [text, setText] = useState('')
  const onChange = (e) => {
    setText(e.target.value);
  }
  const onReset = () => {
    setText('')
  }

  return (
    <div>
      <input onChange={onChange} value={text}/>
      <button onClick={onReset}>초기화</button>
      <div>
      <b>값 : </b>
      {text}
      </div>
    </div>
  );
}

export default InputSample;

 

만약 input 에 value={text} 쓰지 않으면 초기화할 때 입력창에 쓴 글씨는 사라지지 않는다.

-> 다른 함수로 값 변경할 때, 다 같이 입력값을 변경하고 싶을 때는 value값을 지정해주어야 한다.

 

input 여러개 사용하기

import React, { useState } from 'react';

function InputSample(){
  const [inputs, setInputs] = useState({
    name: '',
    nickname: '',
  });
  const { name, nickname } = inputs;

  const onChange = (e) => {
    const {name, value} = e.target;

    setInputs({
      ...inputs, // 기존의 내용 가져오기
      [name]: value, // 대괄호로 감싸면 상태에 따라 name또는 nickname값을 지정한다.
    });
  };

  const onReset = () => {
    setInputs({
      name: '',
      nickname: '',
    });
  }

  return (
    <div>
      <input
       name="name"
       placeholder="이름"
       onChange={onChange}
       value={name}
      />
      <input
       name="nickname"
       placeholder="닉네임"
       onChange={onChange}
       value={nickname}
      />
      <button onClick={onReset}>초기화</button>
      <div>
      <b>값 : </b>
      {name} ({nickname})
      </div>
    </div>
  );
}

export default InputSample;

 

객체를 업데이트할 때는 spread문법과 특정값을 덮어씌우는 방식으로 접근해야 한다.

setInputs({
  ...inputs, // 기존의 내용 가져오기
  [name]: value, // 대괄호로 감싸면 상태에 따라 name또는 nickname값을 지정한다.
});

여기서의 name은 name="name"의 name 이다.

하지만 const {name, nickname} = ... 이 부분에서는 "name" 을 가리킴