Skip to content

Commit e89db24

Browse files
committed
Apply feedback
1 parent f6161cd commit e89db24

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

content/docs/handling-events.md

+15-15
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
---
22
id: handling-events
3-
title: 이벤트 제어하기
3+
title: 이벤트 처리하기
44
permalink: docs/handling-events.html
55
prev: state-and-lifecycle.html
66
next: conditional-rendering.html
77
redirect_from:
88
- "docs/events-ko-KR.html"
99
---
1010

11-
React 엘리먼트에서 이벤트를 제어하는 방식은 DOM 엘리먼트에서 이벤트를 제어하는 방식과 매우 유사합니다. 몇 가지 문법적인 차이는 다음과 같습니다.
11+
React 엘리먼트에서 이벤트를 처리하는 방식은 DOM 엘리먼트에서 이벤트를 처리하는 방식과 매우 유사합니다. 몇 가지 문법적인 차이는 다음과 같습니다.
1212

13-
* React의 이벤트는 소문자 대신 카멜케이스(camelCase)를 사용합니다.
13+
* React의 이벤트는 소문자 대신 캐멀 케이스(camelCase)를 사용합니다.
1414
* JSX를 사용하여 문자열이 아닌 함수로 이벤트 핸들러를 전달합니다.
1515

1616
예를 들어, HTML은 다음과 같습니다.
@@ -29,7 +29,7 @@ React에서는 약간 다릅니다.
2929
</button>
3030
```
3131

32-
또 다른 차이점으로, React에서는 `false`반환하는 것으로 기본 동작을 방지할 수 없습니다. 반드시 `preventDefault`를 명시적으로 호출해야 합니다. 예를 들어, 일반 HTML에서는 새 페이지를 여는 링크의 기본 동작을 방지하기 위해 다음과 같은 코드를 작성합니다.
32+
또 다른 차이점으로, React에서는 `false`반환해도 기본 동작을 방지할 수 없습니다. 반드시 `preventDefault`를 명시적으로 호출해야 합니다. 예를 들어, 일반 HTML에서는 새 페이지를 여는 링크의 기본 동작을 방지하기 위해 다음과 같은 코드를 작성합니다.
3333

3434
```html
3535
<a href="#" onclick="console.log('The link was clicked.'); return false">
@@ -54,19 +54,19 @@ function ActionLink() {
5454
}
5555
```
5656

57-
여기서 `e`통합적인 이벤트입니다. React는 [W3C 스펙](https://www.w3.org/TR/DOM-Level-3-Events/)에 따라 통합적인 이벤트를 정의하기 때문에 브라우저 호환성에 대해 걱정할 필요가 없습니다. 더 자세한 사항은 [`SyntheticEvent`](/docs/events.html)을 참고하시기 바랍니다.
57+
여기서 `e`합성 이벤트입니다. React는 [W3C 명세](https://www.w3.org/TR/DOM-Level-3-Events/)에 따라 통합적인 이벤트를 정의하기 때문에 브라우저 호환성에 대해 걱정할 필요가 없습니다. 더 자세한 사항은 [`합성 이벤트`](/docs/events.html)을 참고하시기 바랍니다.
5858

5959
React를 사용할 때 DOM 엘리먼트가 생성 된 후 리스너를 추가하기 위해 `addEventListener`를 호출할 필요가 없습니다. 대신, 엘리먼트가 처음 렌더링될 때 리스너를 제공하면 됩니다.
6060

61-
[ES6 class](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Classes)를 사용하여 컴포넌트를 정의할 때, 일반적인 패턴은 이벤트 핸들러를 class의 메서드로 만드는 것입니다. 예를 들어, 다음 `Toggle` 컴포넌트는 사용자가 "ON"과 "OFF" 상태를 토글 할 수 있는 버튼을 렌더링합니다.
61+
[ES6 클래스](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Classes)를 사용하여 컴포넌트를 정의할 때, 일반적인 패턴은 이벤트 핸들러를 클래스의 메서드로 만드는 것입니다. 예를 들어, 다음 `Toggle` 컴포넌트는 사용자가 "ON"과 "OFF" 상태를 토글 할 수 있는 버튼을 렌더링합니다.
6262

6363
```js{6,7,10-14,18}
6464
class Toggle extends React.Component {
6565
constructor(props) {
6666
super(props);
6767
this.state = {isToggleOn: true};
6868
69-
// 콜백에서 `this`가 작동하기 위해 이 바인딩이 필요합니다.
69+
// 콜백에서 `this`가 작동하려면 아래와 같이 바인딩 해주어야 합니다.
7070
this.handleClick = this.handleClick.bind(this);
7171
}
7272
@@ -93,15 +93,15 @@ ReactDOM.render(
9393

9494
[**CodePen에서 실행하기**](http://codepen.io/gaearon/pen/xEmzGg?editors=0010)
9595

96-
JSX 콜백안에서 `this`의 의미에 대해 주의해야 합니다. JavaScript에서 class 메서드는 기본적으로 [바인드](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)되어 있지 않습니다. `this.handleClick`바인드 하지 않고 `onClick`에 전달하였다면, 함수가 실제 호출될 때 `this``undefined`가 됩니다.
96+
JSX 콜백 안에서 `this`의 의미에 대해 주의해야 합니다. JavaScript에서 클래스 메서드는 기본적으로 [바인딩](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)되어 있지 않습니다. `this.handleClick`바인딩하지 않고 `onClick`에 전달하였다면, 함수가 실제 호출될 때 `this``undefined`가 됩니다.
9797

98-
이는 React만의 특수한 동작이 아니며, [JavaScript에서 함수가 작동하는 방식](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/)의 일부입니다. 일반적으로 `onClick={this.handleClick}`과 같이 뒤에 `()`를 사용하지 않고 메서드를 참조할 경우, 해당 메서드를 바인드 해야 합니다.
98+
이는 React만의 특수한 동작이 아니며, [JavaScript에서 함수가 작동하는 방식](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/)의 일부입니다. 일반적으로 `onClick={this.handleClick}`과 같이 뒤에 `()`를 사용하지 않고 메서드를 참조할 경우, 해당 메서드를 바인딩 해야 합니다.
9999

100-
만약 `bind`를 호출하는 것이 불편하다면, 이를 해결할 수 있는 두 가지 방법이 있습니다. 실험적인 [public class fields 문법](https://babeljs.io/docs/plugins/transform-class-properties/)을 사용하고 있다면, class fields를 사용하여 콜백을 올바르게 바인드할 수 있습니다.
100+
만약 `bind`를 호출하는 것이 불편하다면, 이를 해결할 수 있는 두 가지 방법이 있습니다. 실험적인 [퍼블릭 클래스 필드 문법](https://babeljs.io/docs/plugins/transform-class-properties/)을 사용하고 있다면, 클래스 필드를 사용하여 콜백을 올바르게 바인딩할 수 있습니다.
101101

102102
```js{2-6}
103103
class LoggingButton extends React.Component {
104-
// 이 문법은 `this`가 handleClick 내에서 바인드되도록 합니다.
104+
// 이 문법은 `this`가 handleClick 내에서 바인딩되도록 합니다.
105105
// 주의: 이 문법은 *실험적인* 문법입니다.
106106
handleClick = () => {
107107
console.log('this is:', this);
@@ -119,7 +119,7 @@ class LoggingButton extends React.Component {
119119

120120
[Create React App](https://github.com/facebookincubator/create-react-app)에서는 이 문법이 기본적으로 설정되어 있습니다.
121121

122-
만약 class fields 문법을 사용하고 있지 않다면, 콜백에 [화살표 함수](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions)를 사용하는 방법도 있습니다.
122+
만약 클래스 필드 문법을 사용하고 있지 않다면, 콜백에 [화살표 함수](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions)를 사용하는 방법도 있습니다.
123123

124124
```js{7-9}
125125
class LoggingButton extends React.Component {
@@ -128,7 +128,7 @@ class LoggingButton extends React.Component {
128128
}
129129
130130
render() {
131-
// 이 문법은 `this`가 handleClick 내에서 바인드되도록 합니다.
131+
// 이 문법은 `this`가 handleClick 내에서 바인딩되도록 합니다.
132132
return (
133133
<button onClick={(e) => this.handleClick(e)}>
134134
Click me
@@ -138,7 +138,7 @@ class LoggingButton extends React.Component {
138138
}
139139
```
140140

141-
이 문법의 문제점은 `LoggingButton`이 렌더링될 때마다 다른 콜백이 생성된다는 것입니다. 대부분의 경우 문제가 되지 않으나, 콜백이 하위 컴포넌트에 props로서 전달된다면 그 컴포넌트들은 추가로 다시 렌더링을 수행할 수도 있습니다. 이러한 종류의 성능 문제를 피하고자, 생성자 안에서 바인드하거나 class fields 문법을 사용하는 것을 권장합니다.
141+
이 문법의 문제점은 `LoggingButton`이 렌더링될 때마다 다른 콜백이 생성된다는 것입니다. 대부분의 경우 문제가 되지 않으나, 콜백이 하위 컴포넌트에 props로서 전달된다면 그 컴포넌트들은 추가로 다시 렌더링을 수행할 수도 있습니다. 이러한 종류의 성능 문제를 피하고자, 생성자 안에서 바인딩하거나 클래스 필드 문법을 사용하는 것을 권장합니다.
142142

143143
## 이벤트 핸들러에 인자 전달하기 {#passing-arguments-to-event-handlers}
144144

@@ -149,6 +149,6 @@ class LoggingButton extends React.Component {
149149
<button onClick={this.deleteRow.bind(this, id)}>Delete Row</button>
150150
```
151151

152-
위 두 줄은 동일하며 각각 [화살표 함수](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)[`Function.prototype.bind`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind)를 사용합니다.
152+
위 두 줄은 동등하며 각각 [화살표 함수](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)[`Function.prototype.bind`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind)를 사용합니다.
153153

154154
두 경우 모두 React 이벤트를 나타내는 `e` 인자가 ID 뒤에 두 번째 인자로 전달됩니다. 화살표 함수를 사용하면 명시적으로 인자를 전달해야 하지만 `bind`를 사용할 경우 추가 인자가 자동으로 전달됩니다.

0 commit comments

Comments
 (0)