私はプログラム的にナビゲートしたいReactJSベースのウェブサイトを持っています。基本的に、ワークフローはループされます。バニラJavaScriptを使用して動的に追加された要素をクリックすることを模倣する
- Element1をクリックします。
- Webページコードが動的に変更され、その間にElement2が追加されます。
- Element2をクリックします。
その他、ElementNをクリックするまで、Webページは初期状態に戻り、Element1が再び表示されます。これらの要素をクリックすると、ウェブサイト自体から自動化したいものがあります。
ウェブサイトのコンテンツの作成と変更を担当するJSファイルにアクセスできます。私が興味を持っている要素を記述するコードを探し出し、必要に応じて余分なイベントリスナーを追加することができます。
私はクライアント側での開発がほぼ完全に新しいので、この作業を解決する私のアプローチは純粋に直感的です。これまでの私の考えは、DOMに要素が追加され、そのリスナーから "onclick"リスナーを呼び出す(または他の要素で "click"イベントを送出する)ときに起動する、ある種の "onAdded"イベントのイベントリスナーを追加することでした方法)。しかし、私はDOMツリーに追加を示すイベントは見つかりません。
- はアプローチが実行可能な(かつ適切な)上述した:
ので、厳密に言えば、私は2つの質問がありますか?もしそうなら、私はそれをどのように正確に達成するのですか?
- 私はそれがすべて間違っているなら、私の仕事を達成する正しい方法は何でしょうか?マシュー・ハーベストの提案を1として
編集1
、私はcomponentDidMount
などのライフサイクルメソッドを反応させるのに見えました。私がクリックを自動化したい要素は独立した反応コンポーネントではなく、createElement
コールの巨大なチェーンを持つrender
メソッドの中に追加された他のコンポーネントの内容です。
だから、問題は特定の要素がDOM構造に追加された瞬間を検出することから、その要素とやり取りする方法を見つけることに変わります。
簡単に(そして醜い)の方法は、私は現在、それを見ると、私はドットで区切られた数字の文字列である(そのdata-reactid
属性でクリックしたい要素を探し、componentDidMount
からwindow
オブジェクトを使用することで、それを行うには私が知る限り、動的に生成され、要素階層を反映します)、必要なDOMイベントをディスパッチします。
文書の構造が変更された場合は、data-reactid
の値が再び破損します。私はどういうわけかReact自身のonClick
イベントを適切に送りたいと思っていますが、どうすればいいのか分かりません。 createElement
メソッドに渡される関数をonClick
プロパティの値としてcomponentDidMount
から呼び出してみましたが、何らかの理由で機能しません。
this articleに記載されているDOMとやりとりする方法も試しましたが、私の場合はReactDOM
オブジェクトが定義されていないようです。
私はクライアント側の開発者、特にReactの開発者ではないので、ウェブサイトのクライアントロジックがどのように機能しているかを全体的に把握することはできません。それをさらに難しくするために、縮小/難読化されるべきです。だから誰かが私にReactのすべてのドキュメントを読ませずに具体的な提案をすることができたら、私は感謝しています。
あなたのアプリはReactなので、あなたは['componentDidMount'](https://facebook.github.io/react/docs/component-specs.html#mounting-componentdidmount)と[' componentDidUpdate '](https://facebook.github.io/react/docs/component-specs.html#updating-componentdidupdate)ライフサイクルメソッド。 –
これはすべて州によって管理することができます。要素1のsetStateをクリックすると、データが変化します。これは、要素2がそのsetStateをクリックし、サイクルが継続する状態が変化するためです。 –
@MatthewHerbst、ご意見ありがとうございます。その道を辿って私の最初の質問を再構成しました。詳細については、投稿の編集を参照してください。 – Semisonic