본문 바로가기
프로그래밍 개발/ReactJs

ReactJs - input

by Jinseok Kim 2021. 1. 6.
반응형

 

input

 

 

 

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;

 

App.js

import React, { Component } from 'react';
import PhoneForm from "./components/PhoneForm";
import './App.css';

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

 

  • onChange 이벤트가 발생하면, e.target.value 값을 통하여 이벤트 객체에 담겨있는 현재의 텍스트 값을 읽어올 수 있다.
  • 해당 값을 state 의 name 부분으로 설정하세요. render 부분에서 input 을 렌더링 할 떄에는 value 값과 onChange 값을 넣어주었으며 onChange 는 input 의 텍스트 값이 바뀔때마다 발생하는 이벤트다.
  • 여기에 만들어둔 handleChange 를 설정했다. 그리고, 나중에 우리가 데이터를 등록하고나면 이 name 값을 공백으로 초기화 해주고, 그렇게 초기화 됐을 때 input 에서도 반영이 되도록 value 를 설정해주었다.

 

 

 

 

 

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 속성을 사용하는 것으며 render 부분을 보면, 각 input 에 name 값을 부여해주었다. 이를 통하여 각 input 을 구분 할 수 있게 됐다.
  • 즉 name 값은, event.target.name 을 통해서 조회 할 수 있는 것이다.
  • setState 내부에서 사용된 문법 []대괄호는 Computed property names 라는 자바스크립트의 문법이다. 계산식이 key값으로 들어올 수 있게 하는 것이라고 볼 수 있다.

 

 

Computed property names 문법 예시 코드

let i = 0
let a = {
  ['foo' + ++i]: i,
  ['foo' + ++i]: i,
  ['foo' + ++i]: i
}

console.log(a.foo1) // 1
console.log(a.foo2) // 2
console.log(a.foo3) // 3

 

 

 

 

 

 

부모 컴포넌트에게 정보 전달하기

 

 

  • state 안에 있는 값들을 부모 컴포넌트에게 전달해줄 차례인데 이러한 상황에는, 부모 컴포넌트에서 메소드를 만들고, 이 메소드를 자식에게 전달한 다음에 자식 내부에서 호출하는 방식을 사용한다.

 

App.js

import React, { Component } from 'react';
import PhoneForm from './components/PhoneForm';

class App extends Component {
  handleCreate = (data) => {
    console.log(data);
  }
  render() {
    return (
      <div>
        <PhoneForm
          onCreate={this.handleCreate}
        />
      </div>
    );
  }
}

export default App;

 

  • App 에서 handleCreate 라는 메소드를 만들고, 이를 PhoneForm 한테 전달해주었다.
  • 그리고, PhoneForm 쪽에서 버튼을 만들어서 submit 이 발생하면 props 로 받은 함수를 호출하여 App 에서 파라미터로 받은 값을 사용 할 수 있도록 하였다.

 

 

PhoneForm.js

import React, { Component } from 'react';

class PhoneForm extends Component {
  state = {
    name: '',
    phone: ''
  }
  handleChange = (e) => {
    this.setState({
      [e.target.name]: e.target.value
    })
  }
  handleSubmit = (e) => {
    // 페이지 리로딩 방지
    e.preventDefault();
    // 상태값을 onCreate 를 통하여 부모에게 전달
    this.props.onCreate(this.state);
    // 상태 초기화
    this.setState({
      name: '',
      phone: ''
    })
  }
  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <input
          placeholder="이름"
          value={this.state.name}
          onChange={this.handleChange}
          name="name"
        />
        <input
          placeholder="전화번호"
          value={this.state.phone}
          onChange={this.handleChange}
          name="phone"
        />
        <button type="submit">등록</button>
      </form>
    );
  }
}

export default PhoneForm;

 

 

 

 

반응형

'프로그래밍 개발 > ReactJs' 카테고리의 다른 글

ReactJs - 배열을 다루는 CRUD 구현  (0) 2021.01.07
ReactJs - LifeCycle API  (0) 2021.01.06
ReactJs - props 와 state  (0) 2021.01.05
ReactJs - JSX 기본  (0) 2021.01.05
ReactJs - Update , Delete기능 구현하기  (0) 2021.01.04

댓글