https://mingjiezhang.github.io/에서 처음 출판되었습니다.
JavaScript 에서이 객체는 런타임 기능 기반 실행 환경 (즉, 컨텍스트)에 바인딩됩니다.
React에서 데모로 시작하십시오
Facebook이 최근 REACT를 업데이트했을 때 ES6의 클래스가 구성 요소 작성 방법에 추가되었습니다. Facebook은 또한 Component Creation 사용 Realt.component에서 상속 된 클래스를 정의하여 구성 요소 클래스를 정의 할 것을 권장합니다. 공식 데모 :
Class likeBitton을 rect.component {constructor () {super (); this.State = {liked : false}; this.hondleClick = this.handleClick.bind (this);} handleClick () {this.setState ({liked :! this.state.liked}); '좋아요': 'haven/'t liked '; return (<div onclick = {this.handleclick}> you {text} this. this. 토글을 클릭하십시오.위의 데모에는 이러한 사용법이 많이 있습니다. LikeButton 클래스에서 react.component를 확장하면 클래스가 컨텍스트에 의해 구체적으로 결정되기 때문에 클래스를 선언하므로 클래스 정의에서 이것의 사용법을 알 수 없습니다. 이는 위에서 정의 된 클래스와 동일하며, 먼저 생성자 () 함수를 호출하고,이 문맥은 인스턴스 개체입니다. 마찬가지로, this.state.liked 의이 컨텍스트는 렌더 () 함수도 객체입니다. 문제는 onclick = {this.handleclick}이 기능에 대한 참조를 얻는 데 아무런 문제가 없으며 여기서 컨텍스트가 객체라는 것입니다.
이 시점에서 문제는 React.createClass에서 onclick 이벤트가 트리거 될 때 handleclick ()가 LikeButton 인스턴스에 자동으로 바인딩된다는 것입니다. 현재이 기능의 컨텍스트가 인스턴스입니다. 그러나 ES6 클래스 작성에서 Facebook은 자동 바인딩을 취소했습니다. LikeButton을 인스턴스화 한 후 HandleClick ()의 컨텍스트는 DIV (Backing Instance)의 지원 인스턴스이며 HandleClick ()의 컨텍스트는 원래 LikeButton의 인스턴스로 제한됩니다. 이 문제에 대한 여러 해결책이 있습니다.
bind () 함수를 사용하여 이것의 컨텍스트를 변경하십시오
클래스 선언에서 생성자 () 함수를 사용할 수 있습니다.
this.handleClick = this.handleClick.bind (this);
이 방법은 bind () 바인딩이며 여러 번 사용됩니다. 이 메소드에서 인스턴스를 선언 한 후 인스턴스의 어느 곳에서나 handleClick () 함수를 사용할 수 있으며이 handleClick () 함수의 컨텍스트는 LikeButton 인스턴스 객체입니다.
또한이 컨텍스트를 함수가 사용되는 LikeButton 인스턴스 객체에 바인딩 할 수도 있습니다. 코드는 다음과 같습니다
<div onclick = {this.handleclick.bind (this)}> you {text} this. 토글을 클릭하십시오. </div>이 메소드는 bind () 함수를 사용하여 매번 구성 요소 객체에 바인딩해야합니다.
ES6의 화살표 기능
화살표 기능 =>가 ES6에 추가되었습니다. 편의성 외에도 화살표 기능은이 기능이 정의 된 컨텍스트 에이 함수를 바인딩하는 또 다른 기능을 갖습니다. 이 기능은 또한이 문제를 해결하는 데 도움이 될 수 있습니다. 다음 코드를 사용하십시오.
<div onclick = {() => this.handleClick ()}> you {text} this. 토글을 클릭하십시오. </div>이런 식으로 이것의 컨텍스트. handleClick ()은 likeButton 인스턴스 객체에 바인딩됩니다. 개인적으로, 나는 화살표 함수를 사용하면 javaScript가 객체 지향 프로그래밍 스타일에 더 가깝다고 생각합니다.
이 요약
이것의 본질은 다음과 같습니다. 이것은 범위와 관련이 없지만 실행 컨텍스트와 관련이 없습니다.
위는 ES6 에서이 구성 요소를 React의 ES6에서 작성하는 방법입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!