1) セッター/ゲッター地獄
画面のフォームに項目が増えると、画面の項目の数だけ、
[ゲッター, セッター] = useState(項目名,初期値)
(のおまじない)が並びます。
フォームの項目をオブジェクトにまとめることはできる、けれど、そうすると、変更検知がオブジェクト単位になる(オブジェクトのプロパティ単位での変更検知はできない)ので、フォームの個々の項目の変更による画面の細やかな制御はできません。
Vue.js:
.value (のおまじない)が必要なことを嫌う人がいますけど、フォームの項目を、変更による画面の細やかな制御を損なうことなく、オブジェクトにまとめることができるので、必要となる.valueの数は少なくでき、.value地獄になることはありません。
.value地獄になっているとしたら、それはロジックの設計の問題で、Vue.jsの問題ではありません。
モダンなプログラミング言語の多くでは、Computed Property(演算プロパティ)etcを導入して、セッター/ゲッター地獄を回避しています。
2) 公式ドキュメントを読んでも、挙動のナゼがわからない
React自体、抽象化されすぎている上に、公式ドキュメントも、実装の詳細の説明を避けて、抽象的に書かれていて、ユーザーが理解しにくくなっています。
Reactのあの公式ドキュメントを読んで、Reactの挙動を理解できるエンジニアはどれだけいるのでしょうか?
自分は、あの公式ドキュメントを読んでも、ふわっとしかReactの挙動がわからず、Reactのこの挙動、どうなってんの(何故、こうなってんの)?が全く解決しませんでした。
GUIプログラミングを齧ったことがあり、なおかつ、DOMまわりを、ある程度、理解してる人間が読んでも、React自体の挙動をふわっとしか想像できないドキュメントになってます。
あの公式ドキュメントを読んで、規約(こう書いてね(のおまじない))を読んでる感がしない人、どれだけ、いるんでしょうか?
(Reactの実装の詳細は伏せられた上で)こんな感じになってるからこう書いてね、が羅列されてるだけ、のドキュメント。
ナゼが知りたいのに、ナゼについては一切?書かれていない、ので、読んでも、ナゼへの答えはない。
実装の詳細(Fiberまわり)を省略してる(隠してる?)ので、そうなってしまっています。
公式ドキュメントがアレなせいか、公式ドキュメントを参照して書かれたらしいReactの解説ページも説明がふわっとしています。
ふとFiberまわりを調べたら、React自体の挙動がクリアになりました。
Fiberまわりを理解しないと、Reactの挙動がナゼそうなっているのかがわかりません。
公式ドキュメントでは、Fiberまわりについて触れられていません。
(旧公式ドキュメントに、Fiberという差分検出処理エンジンを使っています、という記述があるのみ。現公式ドキュメントでは、その記述はなくなっています。)
React界隈では、React開発チームのメンバーの書いたドキュメントを読んだり、Reactのソースコードを読むetcしたり、して、Reactの挙動のナゼを理解しているエンジニアが珍重されている印象です。
公式ドキュメントがふわっとしているので、そうなってしまっているのではないかと思います。
Reactの挙動の理解はふわっとしたまま、Reactでコードを書いているエンジニアが多い印象です。
Vue.js:
実装の詳細がわからなくても、GUIプログラミングやDOMまわりの知識が、ある程度、あれば、その挙動を想像できるドキュメントになっている印象です。
ある程度の前提知識があるなら、挙動を想像するのに必要なことは、全て、公式ドキュメントに書かれてます。
公式ドキュメントを読んで、ふわっとしてると感じることは先ずない(はず)です。
3) 守備範囲を拡大して肥大化していっている
コンパクトなライブラリとして登場した(はず)が、コンポーネントまわりだけでなく、周辺にまで手を伸ばし、リモート関数まで追加して、通信まわりetcまで面倒をみるようになり、最早、コンパクトなライブラリとは呼べなくなっています。
リモート関数(Server Function)/サーバー・コンポーネント(RSC)のために、専用のプロトコル(flightプロトコル)まで実装しています。
flightプロトコルまわりで、過去数回、脆弱性が発見されています。
守備範囲を拡大した上で、柔軟性と自由度とパフォーマンスを追い求めた結果、脆弱性が埋め込まれた印象です。未知の脆弱性がないかは不明です。
バックエンドや通信まわりに疎いフロントエンド屋がサーバーサイドまわりに手を広げた結果、脆弱性が埋め込まれた印象です。
サーバーサイドまわりも、コアに追加していっているので、コアが肥大化していっています。
モジュール分割して、必要な機能のみを取捨選択できるようにはなっていません。
Vue.js:
コンポーネントまわりの機能のみを実装しています。
通信まわりetcまで面倒を見て、サポートする機能を拡大する予定は、今のところ、ありません(発表されている範囲では)。
3.6の開発がRCフェーズに入り、4の開発というか設計?がスタートしていています。4でも、この路線は変更されないはずです。
原作者であるEvan You氏は、Viteの原作者でもあり、なおかつ、Cloudflare上で動作するサーバーサイド・フレームワークであるVoidの開発にも携わっているので、Vue.jsの守備範囲の拡大には走らないはずです。
餅は餅屋、門外漢が手を出しても、いいことはありません。
4)近年、目新しくはみえるものの本質的ではない機能追加が多い
Reactの仮想DOMまわりに手を入れ性能改善しようとするサードパーティ製派生プロダクトは存在したものの、それらの成果を取り入れるetcして、React本体の性能を改良する方向には向かわず、逆に、React開発チームが行った変更により、派生プロダクトの開発チームは、追従を諦め、その開発を終了しています。
Reactの近年の新バージョンでは、サーバサイドの機能強化etcの目新しくは見えるだけの機能の追加ばかりが目につき、クライアントサイドでは、非同期への対応が図られてはいるものの、性能が大きく改善されるような、ある種地味ではあるものの根本的な、改善はありません。
React Foundationは設立されたものの、Reactの今後の開発体制や今後のロードマップに関して、何の発表もありません。大々的に?設立発表は行われたものの、それ以降、表立っての何の動きもありません。
React Foundation自体、今のところ、Reactの著作の権利まわりの管理団体でしかない印象です。
推敲中 …