본문 바로가기

프론트엔드관련 책예제실습정리/리기술요약

이벤트핸들링2

3-1.이벤트핸들링익히기

-input 여러개 다루기

///*** keypoint: input의 name 값 key로 가져오기 
handleChage = (e) =>{
	[e.target.name] : e.target.value
	//message:e.target.value
    //username:e.target.value
}
///EventPractice.js

import React, { Component } from "react";

class EventPractice extends Component {
  state = {
    username: "",
    message: "",
  };

  handleChange = (e) => {
    this.setState({
      [e.target.name]: e.target.value,
    });
  };
  handleClick = (e) => {
    alert(this.state.username + ":" + this.state.message);
    this.setState({
      username: "",
      message: "",
    });
  };

  render() {
    return (
      <div>
        <h1>이벤트연습</h1>
        <input
          type="text"
          name="username"
          value={this.state.username}
          onChange={this.handleChange}
        />
        <input
          type="text"
          name="message"
          value={this.state.message}
          onChange={this.handleChange}
        />
        <button onClick={this.handleClick}>버튼</button>
      </div>
    );
  }
}

export default EventPractice;

-onkeyPress 이벤트핸들링

import React, { Component } from "react";

class EventPractice extends Component {
  state = {
    username: "",
    message: "",
  };

  handleChange = (e) => {
    this.setState({
      [e.target.name]: e.target.value,
    });
  };
  handleClick = (e) => {
    alert(this.state.username + ":" + this.state.message);
    this.setState({
      username: "",
      message: "",
    });
  };
  handleKeyPress = (e) => {
    if (e.key === "Enter") {
      this.handleClick();
    }
  };

  render() {
    return (
      <div>
        <h1>이벤트연습</h1>
        <input
          type="text"
          name="username"
          value={this.state.username}
          onChange={this.handleChange}
        />
        <input
          type="text"
          name="message"
          value={this.state.message}
          onChange={this.handleChange}
          onKeyPress={this.handleKeyPress}
        />
        <button onClick={this.handleClick}>버튼</button>
      </div>
    );
  }
}

export default EventPractice;

-함수형 컴포넌트로 구현하기

import React, { useState } from "react";

const EventPractice = () => {
  const [username, setUsername] = useState("");
  const [message, setMessage] = useState("");
  const onChangeUsername = (e) => setUsername(e.target.value);
  const onChangeMessage = (e) => setMessage(e.target.value);
  const onClick = () => {
    alert(username + ":" + message);
    setUsername("");
    setMessage("");
  };
  const onKeyPress = (e) => {
    if (e.key === "Enter") {
      onClick();
    }
  };
  return (
    <div>
      <h1>이벤트연습</h1>
      <input
        type="text"
        name="username"
        placeholder="사용자명"
        value={username}
        onChange={onChangeUsername}
      />
      <input
        type="text"
        name="message"
        placeholder="아무거나 입력하세요"
        value={message}
        onChange={onChangeMessage}
        onKeyPress={onKeyPress}
      />
      <button onClick={onClick}>확인</button>
    </div>
  );
};

export default EventPractice;

-onChange함수를 하나로 합치고, e.target.name 활용하기 : input이 여러개일 경우 유용

(useState에 객체삽입)

import React, { useState } from "react";

const EventPractice = () => {
  const [form, setForm] = useState({
    username: "",
    message: "",
  });
  const { username, message } = form;
  const onChange = (e) => {
    const nextForm = {
      ...form,
      [e.target.name]: e.target.value,
    };
    setForm(nextForm);
  };
  const onClick = () => {
    alert(username + ":" + message);
    setForm({
      username: "",
      message,
    });
  };
  const onKeyPress = (e) => {
    if (e.key === "enter") {
      onClick();
    }
  };
  return (
    <>
      <h1>EventPractice</h1>
      <input
        type="text"
        placeholder="username"
        value={username}
        name="username"
        onChange={onChange}
      />
      <input
        type="text"
        placeholder="meassage"
        value={message}
        name="message"
        onChange={onChange}
        onClick={onClick}
      />
      <button onKeyPress={onKeyPress}>버튼</button>
    </>
  );
};
export default EventPractice;

'프론트엔드관련 책예제실습정리 > 리기술요약' 카테고리의 다른 글

컴포넌트 반복  (0) 2021.06.11
ref:DOM에 이름달기  (0) 2021.06.11
이벤트핸들링1  (0) 2021.06.04
컴포넌트2 -state  (0) 2021.06.04
컴포넌트 1 -component,import, props(prototype)  (0) 2021.06.02