[レスポンス]バインディングイベント
21123 ワード
コントロールスライダで親構成部品にアクセスする必要がある場合は、構成部品インスタンスの関数をバインドする必要があります.
反応器でイベントをバインドする方法について説明します.
誰もが異なるハンドルでクリックするボタンを4つ持っています.ボタンごとに何が起こるか見てみましょう.
コンソールを表示すると、ボタンをクリックしないとオブジェクトが表示され、ボタンをクリックしても何も起こりません.
レンダリングするたびに、反応は関数を呼び出します.これは、レンダリング時に
click 1ボタンからレンダリングすると()は関数が事前に呼び出されたためにクリアされます()が、結果は
2ボタンをクリックすると、コンソールにはオブジェクトが表示されず、
3ボタンをクリックすると、このオブジェクトがコンソールに表示されます.
click 3ボタンのアクティビティはclick 1ボタンのアクティビティに
反応器でイベントをバインドする方法について説明します.
バインド方法
1.ジェネレータにバインド
class Foo extends Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
console.log('Click happened');
}
render() {
return <button onClick={this.handleClick}>Click Me</button>;
}
}
一般的な方法2.renderメソッドで矢印関数を使用する
class Foo extends Component {
handleClick() {
console.log('Click happened');
}
render() {
return <button onClick={() => this.handleClick()}>Click Me</button>;
}
}
構成部品をレンダリングするたびに新しい関数が作成されるため、厳密な比較では最適化が損なわれる可能性があります.3.renderメソッドでバインド
class Foo extends Component {
handleClick() {
console.log('Click happened');
}
render() {
return <button onClick={this.handleClick.bind(this)}>Click Me</button>;
}
}
構成部品をレンダリングするたびに新しい関数が作成されるため、パフォーマンスに影響を与える可能性があります.4.等級割引
class Foo extends Component {
handleClick = () => {
console.log('Click happened');
}
render() {
return <button onClick={this.handleClick}>Click Me</button>;
}
}
これは実験段階で、まだ標準ではありません.サンプルコード
class App extends React.Component {
constructor() {
super();
this.handleClick2 = this.handleClick1.bind(this);
}
handleClick1() {
console.log(this);
}
handleClick3 = () => console.log(this);
render() {
return (
<div>
<button onClick={this.handleClick1()}> click 1 </button>
<button onClick={this.handleClick1}> click 2 </button>
<button onClick={this.handleClick2}> click 3 </button>
<button onClick={this.handleClick3}> click 4 </button>
</div>
);
}
}
誰もが異なるハンドルでクリックするボタンを4つ持っています.ボタンごとに何が起こるか見てみましょう.
1ボタンをクリック
handleClick1() {console.log(this);}
<button onClick={this.handleClick1()}> click 1 </button>
コンソールを表示すると、ボタンをクリックしないとオブジェクトが表示され、ボタンをクリックしても何も起こりません.
レンダリングするたびに、反応は関数を呼び出します.これは、レンダリング時に
this.handleClick1()
が実行されたためです.2ボタンをクリック
handleClick1() {console.log(this);}
<button onClick={this.handleClick2}> click 1 </button>
click 1ボタンからレンダリングすると()は関数が事前に呼び出されたためにクリアされます()が、結果は
2ボタンをクリックすると、コンソールにはオブジェクトが表示されず、
undefined
が表示されます.3ボタンをクリック
class App extends React.Component {
constructor() {
super();
this.handleClick2 = this.handleClick1.bind(this);
}
<button onClick={this.handleClick2}> click 3 </button>
생성자에서 바인딩하기
3ボタンをクリックすると、このオブジェクトがコンソールに表示されます.
click 3ボタンのアクティビティはclick 1ボタンのアクティビティに
.bind(this)
万個増加した.4ボタンをクリック
handleClick3 = () => console.log(this);
<button onClick={this.handleClick3}> click 4 </button>
render 메서드 안에서 화살표 함수 사용
4ボタンをクリックすると、このオブジェクトがコンソールに表示されます.click 2ボタンを화살표 함수
に変更Reference
この問題について([レスポンス]バインディングイベント), 我々は、より多くの情報をここで見つけました https://velog.io/@qldudgh/React-이벤트-바인딩Event-Bindingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol