React コンポーネントでは、各メソッドのコンテキストはコンポーネントのインスタンスを指します。つまり、これは現在のコンポーネントに自動的にバインドされ、React はこの参照もキャッシュして CPU とメモリを最大化します。 es6 クラスまたは純粋な関数を使用する場合、この自動バインディングは存在しなくなり、これのバインディングを手動で実装する必要があります。
React イベント バインディングは DOM イベント バインディングに似ていますが、次のような違いがあります:
1. React イベントはキャメルケースで名前が付けられ、DOM イベントの名前は小文字です
2. jsx を介して関数をイベント ハンドラーとして渡します。文字列の代わりに。
3. React イベントは false を返してデフォルトのイベントを防ぐことはできません。明示的にPreventDefault() を呼び出す必要があります。
以下の例:
<a href="#" onclick="console.log('The link was clicked.'); return false"> Click me </a> class ActionLink extends React.Component { constructor(props) { super(props); } handleClick(e) { e.preventDefault(); console.log('The link was clicked.'); } render() { return ( <a href="#" onClick={this.handleClick.bind(this)}>Click Me...</a> ); } }
ps: React コンポーネント クラスのメソッドは、デフォルトではこれをコンポーネント インスタンスにバインドしません。手動でバインドする必要があります。
以下にいくつかのバインディングメソッドを示します:
bindメソッド
直接バインディングはbind(this)ですが、これが引き起こす問題は、バインドがレンダリングされるたびに再バインドされることです。
コンストラクター内でのバインドこれをコンストラクター内でバインドする利点は、関数をレンダリングするたびに再バインドする必要がなく、再度バインドする必要がないことです。
class Home extends React.Component { constructor(props) { super(props); this.state = { }; } del(){ console.log('del') } render() { return ( <p className="home"> <span onClick={this.del.bind(this)}></span> </p> ); } }
パラメータを渡さない場合は、二重コロンを使用することもできます
class Home extends React.Component { constructor(props) { super(props); this.state = { }; this.del=this.del.bind(this) } del(){ console.log('del') } render() { return ( <p className="home"> <span onClick={this.del}></span> </p> ); } }
アロー関数は、関数の「構文の糖衣」であるだけではなく、また、メソッドをバインドする必要がなくなったため、この関数のスコープを定義する this も自動的にバインドされます。
class Home extends React.Component { constructor(props) { super(props); this.state = { }; } del(){ console.log('del') } render() { return ( <p className="home"> <span onClick={::this.del}></span> </p> ); } }
php での this と self の簡単な紹介
以上がイベントをこれにバインドする 4 つの方法の詳細な説明は、react_javascript スキルで説明されています。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。