개인 공부를 위해 작성했습니다
State & Event에 대해 공부하던 중, this
와 bind
의 개념을 정립하고자 기록해본다.
class component를 만들 때, class method 형태로 event handler를 만들게 된다
이 때 JSX의 render()
에 method를 전달할 때에는 this
를 써줘야 한다. 만약 this
를 써주지 않으면 this
는 undefined
가 되므로 전달한 메소드는 작동하지 않는다. 여기서 this
는 component
를 가리킨다.
즉, 렌더링될 때 이 component 안의 메소드야! 라고 전달하는 것과 같은 의미.
이렇게 해야하는 이유는,
this
는 component 내부에서 선언한 method 객체를 가리키는 것이 맞지만
bind 함수
는 바인드하는 함수에서 사용하는this
의 대상을 지정해주는 역할을 한다
const objA = {
name: 'a',
aFunc: function() {
console.log(this.name)
},
}
const objB = {
name: 'b',
}
objA.aFunc() // 예상대로 a가 출력
objA.aFunc.bind(objB) // objA 객체의 aFunc 함수에서 bind(objB)를 호출. bind 메서드에 전해진 인자는 복사된 바인딩 함수의 this 로 전달. 즉, aFunc 함수내의 this가 objB가 된다
const foo = objA.aFunc.bind(objB) // 바인드 함수를 변수에 할당
foo()
4
// b
objA.aFunc.bind(objB)
: objB
에 objA
의 aFunc 메소드
를 bind
한다.
Arrow Function
을 사용하면!click
,change
등의 이벤트 리스너를 붙여줄때마다 bind()함수를 작성하는 귀찮은 일을 하지 않아도 된다!
React_공식분서/State & Event
[ES6, react] 리액트에서 화살표 함수(arrow function)는 선택이 아닌 필수