1. nextTick
次回のタイム更新サイクルは、あなたがより多くを得るために使用できるコールバック遅れの後にDOMが実行し、新たな後 DOMの状態を
デフォルトの新しいバージョンがある mincrotasks、V-の使用を加熱すること
実装のマクロタスクマクロタスクタスク:
setImmediate / MessageChannel /のsetTimeout
2.⽣ライフサイクル
INI トン
initLifecycle /イベント、さまざまな属性のVMをマウントします
callHook:beforeCreated:インスタンスが作成しました
initInjection / initState:初期化注STARTと応答データ
作成:作成し、プロパティがバインドされている、しかしまだ⽣リアルに dom`
マウントに⾏要素:$ EL / VM $マウント()。
ですが、テンプレート:解決するための機能をレンダリング
* .vueは、ファイル メンバーを:VUE-ローダがします する <テンプレート> コンパイル 翻訳 にレンダリングする機能
テンプレートをコンパイルする前に/マウント:beforeMountを
実行し、機能をレンダリングする真に⽣ DOM、およびのために変更し、DOMツリー内の
マウント:マウントされたコンポーネントのアップデートを
実行変更の差分アルゴリズムを、⽐ではありませんトリガに必要 UI更新
flushScheduleQueue
watcher.before:トリガーのBeforeUpdateのフックサブメニュー - watcher.run():実行中ウォッチャー
すべての依存関係がUIの更新された通知、通知のトリガ更新フックサブメニューを:コンポーネントが更新
actived /非活性化(キープアライブ):コンポーネントの破壊されない、キャッシュ、アクティブ化および非アクティブ化
破壊
beforeDestroy:破壊が始まります
身体の自己破壊と破壊のサブメニューコンポーネントとイベントリスナー再帰
削除():ノードの削除
watcher.teardown():空の依存
。Vmがオフ()$:アンバンドリングリッスン
破壊された:トリガーフックサブメニューを完了した後
⾯では、我々は直接コードの形式でVUEの初期化を完了するために、VUEの簡単な一種のライフサイクルであります
新しい新しいヴュー({}) // 初期のインスタンスのVueの 関数_init(){ // 実装プロパティ initLifeCycle(VM) // 初期化イベントシステム、フックサブメニューのような機能 initEvent(VM) // コンパイラスロット、vノードinitRender(VM) / / トリガーフックサブメニュー callHook(VM、 'beforeCreate' ) // 注入機能を追加 initInjection(VM) // 完了データ応答小道具/データ/ウォッチ/演算/メソッドInitState(VM) // 機能を提供追加 initProvide(VM)を / / トリガフックサブメニュー callHook(VM、 '作成者' ) // ノードをマウント IF (VM。options.el $){VM。$ MOUNT(VM。options.el $) } } //は、ノード実装マウント 機能mountComponent(VM){ // 取得機能レンダリング IF(!この.options.render){ // レンダリングするテンプレートを // Vue.compile compileToFunctions LET = {} = compileToFunctionsレンダリング()これ。 =レンダリングoptions.render } // トリガフックサブメニュー callHook( 'beforeMounte' ) // 初期化ビューア // レンダリングレンダリングVDOM、 VDOM = vm.render() // 更新:DOMはpatchsうち、実際の差分に応じてマウントvm._update(VDOM) // トリガフックサブメニュー callHook(VMは、 'マウント' ) } // 更新ノード器具 目的球queueWatcher(ウォッチャー){nextTick(flushScheduleQueue) } // 空の待ち行列 機能flushScheduleQueue(){ // 反復すべての変更キュー のための(){ // のBeforeUpdate watcher.before() // 依存部分更新ノードwatcher.update()callHook( 'を更新') } } // 破壊実装例 Vue.prototype。Destoryは$ = 関数(){ // トリガフックサブメニュー callHook(VM、 'beforeDestory' ) // 自動ボディノードとサブメニュー 削除() // 依存削除 )(watcher.teardownを // リスナー削除 )。$オフ(VMを // トリガフックサブメニュー callHook(VMは、 'destoryed' ) }
J
3.Proxy相に⽐のDefineProperty利点
変更の配列を監視することができます
あなたトラバーサルの深さを監視する必要はありません
データを聞かせ= {:1 } ましょうreactiveData = 新しいプロキシ(データ、{ GET:機能(ターゲット、名){ // ... }、 // ... })
4.ため、ルータ
モード
ハッシュ
歴史
ジャンプ
この。$ router.push()
<=「へのルータのリンク」> </ルータリンク>
プレースホルダ
<ルータビュー> </ルータビュー>
5. vuex
状態:加重状態センター
変異:ステータス変更
アクション:非同期ステータス変更
ゲッター:取得ステータス
モジュール:状態を複数の2つのモジュール、管理が容易