티스토리 뷰

이벤트 사용 시 주의사항

* 카멜 표기법 사용

   onclick -> onClick

   onkypup -> onKeyUp

* 이벤트에는 함수 형태의 값을 전달

  onClick={() => console.log('click!')}

* DOM요소에만 이벤트 설정

  div, button, input등에는 이벤트를 설정할 수 있지만 컴포넌트에는 이벤트를 설정할 수 없음.
  <MyComponent onClick={} />이면 MyComponent에 Onclick이라는 props를 전달하는 것.


1. 클래스형 컴포넌트에서 임시 메서드 사용

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import React, { Component } from "react";
 
class EventSample extends Component {
  /*
  constructor(props) {
    super(props);
 
    //this가 컴포넌트 자신을 제대로 가리키기 위해 메서드를 this와 바인딩
    this.handleChange = this.handleChange.bind(this);
    this.handleClick = this.handleClick.bind(this);
  }*/
 
  state = {
    username: "",
    message: "",
  };
 
  //임의 메서드 생성
  handleChange = (e) => {
    this.setState({
      [e.target.name]: e.target.value,
    });
  };
 
  handleClick = () => {
    //button클릭 시 input의 내용을 띄워준 후 초기화
    alert(this.state.username + ": " + this.state.message);
    this.setState({
      username: "",
      message: "",
    });
  };
 
  handleKeyPress = (e) => {
    //input에서 ender입력 시 button onClick과 같은 메서드 호출
    if (e.key === "Enter") {
      this.handleClick();
    }
  };
 
  render() {
    return (
      <div>
                <h1>이벤트 연습</h1>
        <input
          type="text"
          name="username"
          placeholder="유저명"
          onChange={(e) => {
            //메서드 없이 이벤트 함수 바로 적용
            console.log(e.target.value);
          }}
        />
                
        <input
          type="text"
          name="username"
          placeholder="유저명"
          value={this.state.username}
          onChange={this.handleChange}
        />
                
        <input
          type="text"
          name="message"
          placeholder="아무거나 입력해보세요"
          value={this.state.message}
          onChange={this.handleChange}
          onKeyPress={this.handleKeyPress}
        />
                <button onClick={this.handleClick}>확인</button>
              
      </div>
    );
  }
}
 
export default EventSample;
 

 

 

 

2. 함수형 컴포넌트

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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 = () => {
    //     alter(username + ", " + message);
    //     setUsername('');
    //     setMessage('');
    // }
 
    
  
    //username, message각각의 state를 form state 객체로 만듬
    const [form, setForm] = useState({
      username: '',
      message: ''
    });
  const { username, message } = form;
 
  const onChange = e => {
    setTimeout(() => console.log(e), 500);
    const nextForm = {
      ...form, // 기존의 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 (
    <div>
      <h1>이벤트 연습</h1>
      <input
        type="text"
        name="username"
        placeholder="유저명"
        onChange={(e) => {console.log(e.target.value)}}
      />
 
      <input
        type="text"
        name="username"
        placeholder="유저명"
        value={username}
        onChange={onChange}
      />
      <input
        type="text"
        name="message"
        placeholder="아무거나 입력해보세요"
        value={message}
        onChange={onChange}
        onKeyPress={onKeyPress}
      />
      <button onClick={onClick}>확인</button>
    </div>
  );
};
export default EventPractice;

 

 

 

 

 


참조 : 리액트를 다루는 기술(김민준 / 길벗)

'SW프로그래밍 > React' 카테고리의 다른 글

[React] 컴포넌트 반복, map()함수  (0) 2021.03.12
[React] Ref  (0) 2021.03.11
[React]state  (0) 2021.03.08
[React]컴포넌트와 Props  (0) 2021.03.08
[React]script모듈 & 번들러/바벨  (0) 2021.03.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함