は、コンポーネントが反応しますすべての部門のこれはなぜでしょうか?を除去反応onclickの私は、次のしている
答えて
Reactはイベントリスナー自身をバインドします。したがって、onClickはDOMのonclick属性に直接影響しません。しかし、あなたのコードは実際に動作します(スニペット参照)。
class PlayerRow extends React.Component {
activateKey() {
console.log('ddd')
}
render() {
return (
<div className="row-par">
<div className="details-cont">
</div>
<div className="key-cont">
<div onClick={this.activateKey} className="key">asd</div>
<div onClick={this.activateKey} className="key">qwe</div>
<div onClick={this.activateKey} className="key">zxc</div>
</div>
</div>
)
}
}
ReactDOM.render(
<PlayerRow/>,
document.getElementById('container')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>
でも、私は2つのことを示唆して、アクションハンドラまたはより良いため.bind(this)
を使用し、それがデフォルトでスコープを継承するよう矢印関数を使用します。
handleClick =() => {
console.log('this is:', this);
}
項目: - jQueryのを使用していないhttps://facebook.github.io/react/docs/handling-events.html
セカンド事
からは、ドキュメントを反応させます。あなたはReactを使ってDOMを管理しています.jQueryはデフォルトで副作用を発生させるので、反応の仕方に干渉します。 Reactはコンポーネントの状態や小道具に応じてビューを自動的にレンダリングします。最適化は素晴らしいですし、jQueryは小道具も状態も編集しないので、反応のクールなものは利用しません。
あなたが達成したいことについては、どのブロックがクリックされたかを示すパラメータをアクションハンドラに与えることができます。onClick={() => activateKey(1)}
ハンドラでは、アクティブなIDをローカル状態で保存し、IDがキーIDと一致するかどうかによってブロックを条件付きで与えます。それが私の考えです。
もよく説明されており、すべてクリアです。ありがとうございました –
renderメソッドでES6矢印関数または.bind()を使用すると、不要なオーバーヘッドがコンポーネントに追加されます。あなたがこれを行う場合は、バインド操作が唯一のクラスの初期化フェーズ中に一度メソッドごとに行われる
import React, { Component } from "react";
export default class Demo extends Component {
constructor(props) {
super(props);
this.activateKey = this.activateKey.bind(this);
}
activateKey() {
console.log("ddd");
}
render() {
return (
<div className="row-par">
<div className="details-cont"></div>
<div className="key-cont">
<div onClick={this.activateKey} className="key">asd</div>
<div onClick={this.activateKey} className="key">qwe</div>
<div onClick={this.activateKey} className="key">zxc</div>
</div>
</div>
);
}
}
:あなたは本当に、このようなのようなコンストラクタで、あなたの方法に(これを).bind必要があります。レンダリングメソッドの中でES6の矢印関数または.bind(thisなど..)を使用すると、すべての再レンダリングでonClickイベントを持つ各要素からバインディングが実行されます。
クリックイベントだけを関数に渡す必要がある場合は、.bind(thisなど..)やrenderメソッドのES6矢印関数を使用する必要があります。
- 1. はアンマウントし上のイベントリスナーを削除私は高次の成分は次のように反応していた
- 2. 反応-ルータ-reduxが、私は、次のファイルを持っている
- 3. 私は、次のReactJSコード持っている状態で反応
- 4. はthis.state変数では、私が反応し、次のコードを持っている
- 5. のsetTimeoutは、私は次のようしているのonclick
- 6. はRichFacesのコンテキストメニューonclickの私は、次のしている
- 7. は反応し-スティッキー私は、次の実装しようとしています
- 8. onClickイベントに反応する
- 9. ReactJSはonClickのが反応するように、新しい値
- 10. AndroidボタンonClickは反応しません
- 11. ジャスミンを使用して反応コンポーネントのonClickイベントをテストする
- 12. が反応&WebStorm - 発現は、私は次のコードを持っている
- 13. は、私は、次の冗談テストを持っている「反応 - ネイティブimplementation.js」
- 14. が反応はTypeError:。__WEBPACK_IMPORTED_MODULE_1_jquery ___デフォルト(...)(...)ドラッグは、私は私のプロジェクト反応-Reduxのを使用している機能
- 15. は、ルータ反応し、私は私のアプリの主成分の次のルートを持っている各ルート要素
- 16. が反応 - 反応し、私の.MAP機能の問題を持っている
- 17. は+ jQueryのに反応 - >ボタンのonClickはReactJSを使用し
- 18. 反応内の値状態の消去
- 19. onClickは新しい反応コンポーネントを表示しません。
- 20. 壊れた自動バインディング反応し、ネイティブとを使用して反応させ、リレーので、私はネイティブ反応し、反応するリレーを使用してい
- 21. は、私は2クラスに反応していJsのSetState関数が反応ルータ
- 22. が反応:私は次のように見えるコンポーネント持っている子
- 23. 反応するネイティブ実行-IOSは私がネイティブIOSが反応している
- 24. onClick時に要素を取り除く反応
- 25. 更新ビュー - 私は次のコード持っている反応性機能拡張
- 26. リダイレクトは、私はこのようなフォームをレンダリング反応する成分を有していて、次のページ
- 27. DOMを更新しないonClickメソッドの反応setState
- 28. Reactjs - 私が反応クラスコンポーネント内の次のコードを持っている場合、レンダリングコンポーネント
- 29. onClickイベントが反応しません。
- 30. 反応しているネイティブマップのマーカークリックイベントが反応しない
DOMに 'onclick'プロパティが存在する必要はありません。動的に接続されたリスナーは、検査時に必ずしも表示されるとは限りません。クリックハンドラーは機能しますか?コードは実行されていますか? divの1つをクリックしてみてください。 'activateKey'は' .bind(this) 'を必要とすることに注意してください。 ReactとjQueryの組み合わせも私の推奨ではありません – slezica
なぜReactでjqueryでの使用を推奨していませんか?また、なぜ反応がonclickから外に出るのですか?それは通常のhtmlから取り除かれていませんか? –
ReactはDOMの処理を引き継ぎます。あなたがDOMに触れると、あなたはReactと競合し、Reactが勝つでしょう。 DOM要素の削除、追加、変更を自由に行うことができます。変更を上書きすることもできます。 Reactを使用する予定がある場合、最も安全なコースはjQueryを実行させることです。この例( 'onclick'属性が「消える」という属性)は、ReactがDOMを捨て去る多くの方法のうちの1つにすぎません。 – slezica