[React]input 다루기 - 1


input을 통해 받은 입력을 state에 저장하는 방법에 대해 알아보겠습니다.

input 다루기

src 디렉토리 내부에 components라는 디렉토리를 만들고, 그안에 PhoneForm.js라는 파일을 만들고 다음 코드를 입력합니다.

// file: src/components/PhoneForm.js
import React, { Component } from 'react';

class PhoneForm extends Component {
  state = {
    name: ''
  }
  handleChange = (e) => {
    this.setState({
      name: e.target.value
    })
  }
  render() {
    return (
      <form>
        <input
          placeholder="이름"
          value={this.state.name}
          onChange={this.handleChange}
        />
        <div>{this.state.name}</div>
      </form>
    );
  }
}

export default PhoneForm;

onChange 이벤트가 발생하면, e.target.value값을 통하여 이벤트 객체에 담겨있는 현재의 텍스트 값을 읽어올 수 있습니다.

App.js 도 수정을 해줍니다.

// file: src/App.js
import React, { Component } from 'react';
import PhoneForm from './components/PhoneForm';


class App extends Component {
  render() {
    return (
      <div>
        <PhoneForm />
      </div>
    );
  }
}

export default App;

만약 전화번호를 추가해야 한다면 어떻게 할까요?

input이 여러개 일때는 다음과 같이 코드를 작성합니다.

import React, { Component } from 'react';

class PhoneForm extends Component {
  state = {
    name: '',
    phone: ''
  }
  handleChange = (e) => {
    this.setState({
      [e.target.name]: e.target.value
    });
  }
  render() {
    return (
      <form>
        <input
          placeholder="이름"
          value={this.state.name}
          onChange={this.handleChange}
          name="name"
        />
        <input
          placeholder="전화번호"
          value={this.state.phone}
          onChange={this.handleChange}
          name="phone"
        />
        <div>{this.state.name} {this.state.phone}</div>
      </form>
    );
  }
}

export default PhoneForm;

input의 name속성을 사용해서 각각의 값을 구분할 수 있습니다. 이 name값은 event.target.name을 통해서 조회할 수 있습니다.

setState 내부에 사용된 문법은 Computed property names라는 문법입니다.