質問: バーチャルDOMを操作するReactやRiotなどとDOMを直に操作するjQueryの共存はNGと言った意見や、問題ないという両方の意見があると思うのですが、これは結局どういう場合によくて、どういう場合によくないのでしょうか? タイミングによってうまく描写されないことがあるからそれが問題で、しっかり描写されれば、特に悪い影響はないと考えてしまってよいのでしょうか?
回答: ### jQueryが要らないとする理由 jQueryが要らないとする理由は,**生DOMの操作は人間が直接触ってやることではないから** です. たとえば,React を使ったうえで生DOMを触ってしまうと,life cycle 外で状態が変わってしまい,reactの一番大きな特徴である差分レンダリングが,正常に働かなくなります. また,近年はフロントエンドが複雑化する傾向にあります. 複雑化するフロントエンドにおいて,**生DOMを直接触るのは保守性の低下**にもつながります. なぜならば,生DOMはモジュール化がされていない,いわば**グローバル変数のようなもの**です. 一つの大きなDOMツリーを,複数箇所から操作して変化させるのは非常に危険です. 仮想DOMにすることによって各コンポーネントをモジュール化することができ,それぞれの状態をコンポーネント自身で管理することが可能になり,責務も明白になります. ### jQueryを使う理由がなくなった,もう一つの側面 別の側面から言うと,jQuery は非常に沢山の機能が詰め込まれており非常に大きなライブラリとなってしまっているという側面があります. 具体的には,$.ajax や $.promise, $.defer, $.each など様々あります.これらをすべて使うことはあまりありません. $.ajax しか使わないのであれば,ajax に特化したミニマムなモジュールを使う(例えば,superagentやaxios)ほうが,jsの容量も減り効率的です. promise であれば,q や bluebird などがあります. jQuery はなんでもできる故に肥大過ぎます.頑張りすぎたのです. ### では,jQueryを使う場面は存在しないのか 自分はそうとは思いません. ツールには,向き不向きがあります.まだまだこれからでもjQueryが,便利だと感じる場面は複数あります. (ただ,他人の書いたjQueryのコードを僕は絶対にメンテしたくないです.なぜならば,セレクターによるDOMの取得は,どこの何を取得しているのかを即座に理解することが非常に難しいからです.) 思考停止で,ツールを選ぶのではなく,**論理的に考えなぜこのツールを使うのかをしっかり考えた上で選定しましょう** ### 併用するケース 主にbootstrapなどのcssフレームワークと共存したいときに限ると私は思います. jQueryを読み込んだとしても,jQueryのAPIを併用する機会はあまりありません. ただ,$.ajax や $.defer や $.promise といった,DOMに関係ない便利なAPIであれば, 積極的に利用するのはアリだと考えています.