React.js ES6 すべてのメソッドに 'this' をバインドしないようにする。
2023-09-01 15:50:19
質問
最近、React.jsをいじり始め、とても気に入っています。私は物事のコツを得るために、通常のES5で始めたので、ドキュメントはすべてES5で書かれています...
ES6はピカピカで新しいし、いくつかのことを単純化できるようなので、試してみたくなりました。私を悩ませるのは、コンポーネント クラスに追加したすべてのメソッドに 'this' をバインドする必要があり、そうしないと動作しないことです。そのため、私のコンストラクタはこのようになります。
constructor(props) {
super(props);
this.state = { ...some initial state... }
this.someHandler = this.someHandler.bind(this);
this.someHandler = this.someHandler.bind(this);
this.someHandler = this.someHandler.bind(this);
this.someHandler = this.someHandler.bind(this);
this.someHandler = this.someHandler.bind(this);
this.someHandler = this.someHandler.bind(this);
this.someHandler = this.someHandler.bind(this);
}
もし私がこのクラスにさらに多くのメソッドを追加するとしたら、これはさらに大きく、醜い混乱になるでしょう。
私の質問は、これを回避する、あるいは少なくともより簡単に、より短く、より醜くなくする方法はあるかということです。私が ES6 で React を試したいと思った主な理由の 1 つは、私のコードをより簡潔にすることでしたが、これは逆のことをやっています。どんな提案や意見もありがたいです。
どのように解決するのですか?
あなたは クラスフィールド を使用してコンストラクタの外側でバインディングを行うことができます。それらは以下のようなものです。
class Foo extends React.Component {
handleBar = () => {
console.log('neat');
};
handleFoo = () => {
console.log('cool');
};
render() {
return (
<div
onClick={this.handleBar}
onMouseOver={this.handleFoo}
/>
);
}
}
クラスフィールドは、Babel が実験的にサポートしている クラスプロパティトランスフォーム しかし、それらはまだ実験的なものであり、なぜならそれらは ステージ 3 ドラフト (まだバベルのプリセットにない)ためです。
しかし、ES7 または Babel で機能を有効にするまでは、手動でバインディングを行う必要があります。このトピックは、Babel のブログ記事で簡単にカバーされています。 ES6+ での React .
関連
-
[解決済み] ES6でオブジェクトをクローンする方法はこれで良いのでしょうか?
-
[解決済み] 上級者向けJavaScript。この関数はなぜ括弧でくくられるのですか?重複
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]
-
[解決済み] リダイレクトされずにHTMLフォームを送信する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】アロー関数(パブリッククラスフィールド)をクラスメソッドとして使用するには?
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] ExtJS 4のイベントハンドリングについて
-
[解決済み] 文字列のn番目の出現箇所を取得するには?
-
[解決済み] 兄弟ノードを選択する方法はありますか?
-
[解決済み] JavaScriptで文字列を数値に変換する最速の方法は何ですか?
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] JavaScript で css プロパティを使用して HTML 要素の背景色を設定する方法