개인 공부를 위해 작성했습니다
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)는 선택이 아닌 필수