まず、provide/inject を使用する理由について説明しましょう。祖父コンポーネントと孫コンポーネント間の通信、または曽祖父コンポーネントと孫コンポーネント間の通信には、vuex を使用できます。 確かにその通りですが、聞いてください。プロジェクトが比較的小規模で、コンポーネント通信のシナリオも少ない場合もあります。その場合、いくつかの通信パラメータのためだけに vuex を導入するのは無駄ではないでしょうか。 これ以上長々と説明せずに、provide/inject を使用することが問題の解決策であることをお伝えします。使い方を見てみましょう。 Backhand は、ほんの数行のシンプルなコードです。 1. 親コンポーネントは子コンポーネントに渡すパラメータを提供する provide() { 戻る { リストタイプ: this.listType、 } } 2. サブコンポーネントの使用法: 挿入: ['listType'], もちろん、inject でデフォルト値とパラメータのソースを指定することもできます。 注入:{ リストタイプ:{ from:"par"//定義された名前を指定します default:1 } } わかった!簡単じゃないですか?実際、コンポーネント階層の深さに関係なく、親コンポーネントと祖先コンポーネントの両方が子孫コンポーネントに依存関係を注入できます。 さらにいくつか: provide はオブジェクトまたはオブジェクトを返す関数になります。 inejct: は文字列配列またはオブジェクトになります。 興味があれば、以下のソースコードをご覧ください。これも非常にわかりやすいです。 コアソースコードを提供します: エクスポート関数 provide<T>(キー: InjectionKey<T> | 文字列 | 数値、値: T) { 現在のインスタンスの場合 __DEV__ の場合 { 警告(`provide() は setup() 内でのみ使用できます。`) } } それ以外 { //現在のコンポーネントのprovidesを取得します。デフォルトインスタンスは親クラスのprovidesオブジェクトを継承します。let provided = currentInstance.provides //親の提供オブジェクトをプロトタイプとして使用して、独自の提供オブジェクトを作成します。const parentProvides = currentInstance.parent && currentInstance.parent.provides if (parentProvides === 提供) { 提供 = currentInstance.provides = Object.create(parentProvides) } [キーを文字列として] = 値を提供する } } Inject のコアソースコード: エクスポート関数inject( キー: InjectionKey<任意> | 文字列、 デフォルト値?: 不明、 デフォルトをファクトリとして扱う = false ){ //現在のコンポーネントインスタンスを取得します const instance = currentInstance || currentRenderingInstance if (インスタンス) { //Getは提供します constは=を提供します インスタンス.親 == null ? instance.vnode.appContext && instance.vnode.appContext.provides : インスタンス.親.提供 if (provides && (key as string | symbol) in provided) { //キーが存在する場合は、provides[key as string]を直接返します } そうでなければ (引数の長さ > 1) { //キーが存在しない場合はデフォルト値を設定し、デフォルト値を直接返します return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance.proxy) : デフォルト値 } そうでない場合 (__DEV__) { // いずれも見つからない場合は、warn(`injection "${String(key)}" not found.`) と警告します。 } } そうでない場合 (__DEV__) { 警告(`inject() は setup() または機能コンポーネント内でのみ使用できます。`) } } これで、Vue の provide と inject の使い方と原理の解析に関するこの記事は終了です。Vue の provide と inject の使い方の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: CSS3 とテーブルタグを使用して円軌道アニメーションを実装するためのサンプルコード
CSS には多くの属性があります。特に複数の値を設定する必要がある属性は、長期間使用しないと忘れられ...
フロントエンドテクノロジー層 (写真は少し極端ですが、参考までに) Javascript と DOM...
質問 1: ブラウザに必要なフォントを表示するように指示するにはどうすればよいでしょうか? フォント...
目次紹介とデモAPI: コンテナ財産ライフサイクルコールバックイベントAPI: ドラッグ可能実際の戦...
1. mysqldump コマンドを使用してデータベースをエクスポートします (このコマンドのパスで...
1. mysql5.6をインストールする docker 実行 mysql:5.6すべてのアイテムのダ...
NATこのようにして、仮想マシンのネットワーク カードはホストの VMnet8 に接続されます。この...
(1)実験環境youxi1 192.168.5.101 ロードバランサーyouxi2 192.168...
序文MySQL を扱ったことがある人なら、テーブル メタデータ ロックの待機についてよく知っているは...
目次最初の方法: router-link (宣言型ルーティング) 2番目の方法: router.pu...
1.デバイス幅定義: 出力デバイスの画面表示幅を定義します。 Web ページが Safari で開か...
目次1. プロトタイプの関係2. プロトタイプチェーン3. 結論序文:前回の記事では、JavaScr...
最近、JS の正規表現マッチングの落とし穴を発見したのですが、その時はあまりにも奇妙だったので、何か...
目次1. JavaScriptはページ内のすべてのHTML要素を変更できる1. IDでHTML要素を...
データベース アプリケーションは、アプリケーション システムに不可欠な部分です。リレーショナル デー...