目次- 1. パノラマ
- II. 背景
- 1. 反応: プロフェッショナル
- 2. ビュー: 凡例
- 3. 技術的な思考
- 1. キーの類似点と相違点を例に挙げる
- 2. diffのマクロ比較
- 3. ライフサイクル
- 3.1 反応ライフサイクル
- 3.2 Vueのライフサイクル
- 4. 関数型プログラミング
- 4.1 反応フック
- 4.2 Vue3 組み合わせ API
- 5. イベント処理 (@Click と onClick)
- 6. コンポーネント化
- 7. ビルドツール
- 8. その他
- 5. ファミリーバケツ
1. パノラマ
II. 背景1. 反応: プロフェッショナル
- Reactは2011年に誕生しました(FaxJS)。
- 2013年7月3日 v0.3.0
- 2016年3月30日 v0.14.8
- 2016年4月9日 v15.0.0
- 2017年9月27日 v16.0.0、ファイバーが正式にリリースされました
- 2019 年には、フック構文を正式にサポートする react 16.8 がリリースされました。
- 2020年10月22日 v17
問題の解決方法: We build React to solve one problem:building large applications with data that changes over time. React 、時間の経過とともに変化するデータを扱う大規模なアプリケーションを構築するという 1 つの問題を解決するために構築されました。 2. ビュー: 凡例
2013 年に個人プロジェクトとして始まりましたが、現在では世界 3 大フロントエンド フレームワークの 1 つとなり、中国本土ではフロントエンドの第一選択肢となっています。 (面接官の質問: なぜ Vue の使い方を学んだのですか? 回答: 愛国心だからです!) - 2013年、
Google で働いていたYuxi You氏はAngular にインスピレーションを受け、そこから気に入った部分を抽出して、当初Seed と名付けられた軽量フレームワークを開発しました。 - 同年 12 月にその芽が出て、
Vue (ビュー レイヤー ライブラリであり、vue はview 意味するフランス語であるため) に名前が変更され、バージョン番号は 0.6.0 になりました。 - 2014 年 1 月 24 日に、Vue はバージョン番号 0.8.0 で正式に一般公開されました。
- 2014 年 2 月 25 日にリリースされた 0.9.0 には、独自のコード名「
Animatrix 」があります。この名前は、「マトリックス」のアニメ版に由来しています。それ以降、重要なバージョンには独自のコード名が付けられます。 - 0.12.0は2015年6月13日にリリースされ、コードネームは
Dragon Ball です。この年、Vueは大きな爆発的な人気を獲得しました。Laravel Laravel (人気のPHPフレームワークコミュニティ)が初めてVueを使用し、JSコミュニティでもVue 人気が高まりました。 -
1.0.0 Evangelion 、 Vue の歴史における最初のマイルストーンです。同年には、 vue-router (2015-08-18)、vuex (2015-11-28)、 vue-cli (2015-12-27) が次々とリリースされ、 Vue ビューレイヤーライブラリからプログレッシブフレームワークへと進化しました。多くのフロントエンドの学生もこのバージョンから Vue ユーザーになりました (vue1 は完全にレスポンシブです)。 - 2016 年 10 月 1 日 2.0.0
Ghost in the Shell React 番目の重要なマイルストーンでした。React のVirtual Dom ソリューションを取り入れ、サーバー側レンダリングもサポートしました。 - 2019年2月4日、2.6のリリース前の長い間、
Vue コアチームはvue-cli3.0 の開発に忙しく、多くの要件を蓄積し、 vue2 の最後から2番目のバージョン(2020年にリリース)をリリースしました。 - 2020年9月18日
vue3 は、誰でもすぐに習得でき、簡単にアプローチできるフレームワークになることを使命として登場しました。同年、新時代のパッケージングツールであるViteもリリースされました(将来的にはwebpack に取って代わる可能性があります)
Vue のマスベース図は次のとおりです。 
3. 技術的な思考react 全体として関数型の概念です。コンポーネントはall in js 記述された jsx 構文を使用し、 html と css をjavaScript に統合します。jsx 構文は比較的柔軟性があります。
Vue の全体的な考え方は、依然として古典的なhtml (構造) + CSS (パフォーマンス) + JS (動作) 形式を採用することです。Vue は開発者にtemplate 使用を推奨し、開発者が使用するv-if 、 v-show 、 v-for などの指示を提供します。したがって、Vue アプリケーションを開発するときは、古典的な Web アプリケーション (構造、パフォーマンス、動作の分離) を作成する感覚になります。 データ管理 ( props 、 data vs state )、コンポーネントの記述、ライフサイクルにおける一般的な相違点と類似点については、ここでは比較しません。 1. キーの類似点と相違点を例に挙げる1. リストにキーを追加する際のreact と vue の最終的な目標は同じです。oldVnode 内の対応するoldVnode ノードをより正確かつ迅速に取得して、パフォーマンスを向上させることです。ただし、実装するアルゴリズムには一定の違いがあります。 1.1 反応する
React が配列をレンダリングするときに、子コンポーネントがキーを提供しない場合は、デフォルトでループ インデックスが最初のレンダリングのキーとして使用されます。 ソース コードは本質的にはブルート フォース比較方式です。単一リンク リスト ファイバーはダブル ポインター アルゴリズムを使用できないため、アルゴリズムではダブル ポインター最適化を使用できません。一般的に、トラバーサルは 2 ラウンド行われます。トラバーサルの最初のラウンド: 更新されたノードの処理。 2 回目の走査: 更新に含まれない残りのノードを処理します。 アルゴリズムの複雑さを軽減するために、React の diff には事前に設定された制限があります。 同じレベルの要素のみを差分します。 DOM ノードが 2 つの更新間で階層を越える場合、React はそれを再利用しようとしません。 異なるタイプの 2 つの要素によって、異なるツリーが生成されます。要素が div から p に変更されると、 React div とその子孫ノードを破棄し、新しい p とその子孫ノードを作成します。 まずキーを決定し、次にタイプを決定します。 2 つが同じであれば、それらは同じノードです。更新 > 追加/削除
1.2 ビューdiff パフォーマンスの面では、 vue react よりも強力です。ソース コードと本を注意深く読んだ後、非常に感心しました。アルゴリズムの問題、つまり最長増加部分列を例に挙げてみましょう。配列 [2, 11, 6, 8, 1] を例にとると、最終出力結果は [0, 2, 3] であり、最も強い増加列のインデックスがそれぞれ 0、2、3 であり、対応する値が 2、6、8 であることを示しています。つまり、この配列内で最も長く連続的に増加する値は、配列内の 3 つの要素 2、6、8 です。 それで、vue3 はこの方法の使用に多大な労力を費やしましたが、その目的は何でしょうか? DOM-Diff プロセス中、Vue2 は、直接比較、直接比較、間接比較などの特別なシナリオの処理を優先します。 DOM-Diff 処理中に、 Vue3 はnewIndexToOldIndexMap の新旧ノードインデックスリストに基づいて最長の安定したシーケンスを見つけ、最長増加サブシーケンスアルゴリズムを比較して、新旧ノードで移動する必要のないノードを見つけ、その場で再利用し、移動する必要があるノードまたはpatch たノード (ノードの追加や削除など) のみを操作して、置換効率を最大化します。 Vue2 バージョンと比較すると、質的な改善です。 2. diffのマクロ比較2.1 反応するReact では、コンポーネントの状態が変化すると、React はこのコンポーネントとそのすべての子孫コンポーネントを再レンダリングします。ただし、再レンダリングは、以前のレンダリング結果がすべて破棄されることを意味するわけではありません。React react 、引き続きdiff を通じて 2 つの仮想 DOM を比較し、最終的に実際の DOM にpatch 。それでも、コンポーネント ツリーが大きすぎる場合は、 diff にはまだオーバーヘッドが発生します。 react 内部的にはfiber を通じて diff アルゴリズムを最適化し、外部的には開発者にshouldComponentUpdate pureComponent 使用して問題を回避することを推奨しています。 2.2 ビューvue2 のレスポンシブ性は Object.defineProperty によって実現されており、getter や setter などの一連の操作を書き換えてオブザーバーモードを実装しています。データが変更されると、React のようにコンポーネントツリー全体を比較するのではなく、データの状態が変わったコンポーネントインスタンスを更新します。 3. ライフサイクル3.1 反応ライフサイクル
古い 15.x-16

新着 16歳以上

その他:componentDidCatch
React ライフサイクルの命名は常に非常に意味的でした (ささやき声: 本当に長くて覚えにくいです) 3.2 Vueのライフサイクル

4. 関数型プログラミング双方とも大規模な変更を行いました。ソースコードは異なりますが、設計思想やコードのシンプルさの面で進歩がありました。 4.1 反応フック
元の面倒なcompomentDidUpdate ライフサイクル => useEffect 、まったく同じではありませんが、ほとんどのシナリオでは、開発者の観点からは、 props または状態のデータが変更された後にどのような結果 (副作用) が発生するかをより気にするため、開発者が前後の値を比較するプロセスが不要になります。 (これは、 vue watch から借用した react であるはずです) 4.2 Vue3 組み合わせ API
vue3 統合 API は、 react hooks からいくつかのアイデアを借用しています。オリジナルよりも優れていると言わざるを得ません。さらに、フレームワーク自体も多くの最適化作業を行っているため、パフォーマンスの点で React に匹敵することはできません。 
関数() {
使用効果(()=>{
// デモが変更されたときに console.log(demo) をトリガーします
}、[デモ])
戻る (
<div>反応する</div>
)
}
'vue' から {reactive, watchEffect} をインポートします。
エクスポートデフォルト{
設定() {
const 状態 = リアクティブ({ カウント: 0、名前: 'zs' })
ウォッチエフェクト(() => {
コンソールログ(状態数)
console.log(状態名)
})
戻る {
州
}
}
}
初期化中のソース コード内の応答メカニズムにより、新しいAPIwatchEffect 、副作用をトリガーするために誰が変更したかを監視する必要さえありません。これは、監視プロセス全体がvue3 ソース コード内のProxy によって完了するためです。 それだけでなく、 vue3 ではネイティブ js に近い構文も導入されました。素晴らしいですね! ! ! ! ! !
<スクリプトの設定>
"vue" から {reactive, ref} をインポートします。
// プログレッシブ更新: ref api
val = ref(""); とします。
todos = リアクティブ([
{
id: 0,
タイトル: 「食べる」
完了: false、
},
{
id: 1,
タイトル: 「眠る」
完了: false、
},
]);
関数addTodo() {
todos.push({
id: todos.length,
タイトル: val.value,
完了: false、
});
val.値 = "";
}
</スクリプト>
実際、この時点で、 vue テクノロジー スタックに精通している学生は、密かに誇らしく「 vue yes !」と言うはずです。 残念ながら、このような優れたライブラリにも独自の問題があります。vue2 Object.defineProperty では、オブジェクトの配列インデックスや新しく追加されたプロパティ値の変更を監視できないのは当たり前のことです。vue3 ではProxy Api を使用してこれらの問題を解決していますが、新しい問題ももたらしています。たとえば、 reactive オブジェクトしか渡すことができません ( react useState 単純および複雑な値を渡すことができます)。一方、公式に推奨されている ref では、.value を通じて値を取得する必要があります。これは本当にコミュニティを爆発させます。このため、vue チームはプレッシャーの下でtoRefs をリリースせざるを得ませんでした (興味のある学生はそれについて学ぶことができます。以前、オフラインで Yibao と議論したことがあります)。 5. イベント処理 (@Click と onClick) 5.1 ビュー
vue v-on (略称:) 命令を使用して DOM イベントをリッスンし、トリガーされたときにJavaScript コードを実行します。 v-on は通常、呼び出す必要があるメソッド名を受け取るために使用されます。
<div @click="helloShanghai">ようこそ</div>
<div @click="helloShanghai('hello')">ようこそ</div>
ネイティブDOMイベントにアクセスするには、 method に$event 明示的に渡すことができます。
<div @click="helloShanghai('hello', $event)">ようこそ</div>
通常の要素addEventListener 、コンポーネント $on 5.2 反応する
React 要素のイベント処理は DOM 要素のイベント処理と非常に似ていますが、構文には若干の違いがあります。
-
React イベントは、純粋な小文字ではなく、キャメルケースを使用して名前が付けられます。 - JSX 構文を使用する場合は、文字列ではなく関数をイベント ハンドラーとして渡す必要があります。
<div onClick={this.handleClick}>クリックしてください</div>
<div onClick={this.handleClick.bind(this)}>クリックしてください</div>
<div onClick={()=>{this.handleClick()})}>クリックしてください</div>
<div onClick={this.handleClick()}>クリックしてください</div><!-- 間違った書き方です>
React16 はdocument に合成イベントをマウントし、バージョン 17 以降ではroot 要素になります。 6. コンポーネント化Vue 、通常のHTML に似たテンプレートの作成が推奨されています。標準の HTML 要素に非常に近い形で記述されていますが、いくつかの属性が追加されています。 React では、すべてのテンプレートを一般的なJavaScript 構文拡張である JSX で記述することを推奨しています。
7. ビルドツール
React ==> React APP の作成 Vue ==> vue-cli
8. その他もちろん、Vue の slots や React のprops.children など、他の比較もあります。 ライフサイクル: getDerivedStateFormProps 、 getSnapshotBeforeUpdate 私の意見: 1. React は、複雑なビジネスロジックやコンポーネントの再利用の問題を処理する点で Vue よりも優れているため、ミッドエンドおよびバックエンド プロジェクトで認められていますが、チーム全体の技術力を強化し、リーダーの設計および品質管理能力を向上させる必要があるため、開発コストが高くなります。 2. vue 、よりフレンドリーで使いやすい記述スタイルで知られています。よりフレンドリーな API とよりユーザーフレンドリーなデザインにより、開発コストと効率が大幅に向上します。 3. 一方、Vue には開発者を標準化する API が多数ありますが、開発者の多様な思考もある程度制限されます。一方、 react には開発者の創造性を向上させる API が少なく、 react 開発者ごとにreact に対する理解が異なり、異なるコード スタイルを生成するためでもあります。 4. Vue と React は、長い開発の過程で成熟してきました。慎重に検討した結果、モバイル側でも大規模なミドルエンドやバックエンドでも、どちらも非常に実現可能であると感じています。フレームワークの良し悪しについては、実際には、会社のチームがどのようなテクノロジー スタックを使用したいのか、どのようなテクノロジー スタックが好きで得意なのかなどについて、もっと考える必要があります。
5. ファミリーバケツ
これで、 vue とreact に関する詳細な記事は終了です。 vue とreact より関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。 今後とも 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:- Vue3 のリアクティブ関数 toRef 関数 ref 関数の紹介
- VueプロジェクトでReactを書く方法の詳細
- Vue3 Reactivityの実装方法を教えます
- Vue3.0 における Ref と Reactive の違いの詳細な分析
- Vue3 における ref と reactive の詳細な説明と拡張
- vue3 の setUp とリアクティブ関数の使用方法の詳細な説明
- Vue3 の組み合わせ API における setup、ref、reactive の完全な使用方法
- React、Angular、Vueの3つの主要なフロントエンド技術の詳細説明
- VueとReactの違いと利点
- Vue と React の違いは何ですか?
|