序文Vue エコシステムでは、公式の状態管理ライブラリである Vuex が、Vue アプリケーション開発に非常に便利な機能をもたらします。ただし、Vuex 20K+ のサイズにはコストも伴います。小規模なプロジェクトでは、ユーザー情報などの少量のデータを保存するためだけに Vuex を導入する価値はありません。 Vue2.2.x では、レベル間コンポーネント間の通信を実現するために、provide/inject API が提供されました。 Vue3.x ではアプリケーション API も提供されるため、これに基づいて基本的な状態管理を実装することが容易になります。 provide/inject を通じて Vuex 関数を実装する方法まずは大まかなロジックを考えてプラグイン化し、use メソッドを通じてアプリケーション インスタンスに登録してみましょう。 install メソッドでは、app.provide メソッドを通じてルート コンポーネントにデータがマウントされます。データはレスポンシブ データである必要があり、データ セキュリティのために、データの変更は制限される必要があります。単方向データ フローの設計に従い、ユーザーが直接変更することはできません。したがって、データを公開するときは、データを読み取り専用として処理する必要があります。 Vuex に似た useStore 関数を実装し、ユーザーがこのメソッドを通じてデータにアクセスできるようにします。 操作を簡素化するために、Vuex に似た mapState、mapMutations、mapActions メソッドを実装します。 使い方はVuexと全く同じです。 このプラグインをアプリケーションに登録する//メイン.ts 'vue' から {createApp} をインポートします。 './App.vue' からアプリをインポートします。 './router' からルーターをインポートします './store' からストアをインポートします const app = createApp(App) app.use(ルーター).use(ストア).mount('#app') プラグインエントリファイルエントリ ファイルで、すべてのメソッドを直接エクスポートします。 // スカイビューエクス/index.ts './main/index' から * をエクスポートします ストアを作成し、対応するデータをルートコンポーネントにマウントします。ストア自体は、コミットやディスパッチなどの状態プロパティとメソッドを含むオブジェクトです。ストアの主な機能は、すべてのコンポーネントがストア オブジェクトを取得して状態のデータを取得し、関連するメソッドを呼び出して状態を変更できるようにすることです。 //スカイビューエクス/メイン/インデックス.ts 'vue' から {inject, reactive, readonly} をインポートします。 const mainStoreSky = Symbol('メインストアキー') インターフェース storeOptions { 状態: 任意 アクション?: 任意 突然変異?: どれか } export const createStore = (options: storeOptions = {}) => { // ストアオブジェクトを作成する const initOptions = { 州: {}、 アクション: {}, 変異: {}, } const mergeOptions: storeOptions = Object.assign(initOptions, オプション) const 状態 = リアクティブ(mergeOptions.state) 定数ストア = { 状態: 読み取り専用(状態)、 ディスパッチ(イベント名: 文字列、...引数: 任意[]) { mergeOptions.actions[イベント名](ストア、...引数) }, コミット(イベント名: 文字列、...引数: 任意[]) { ... }, } 戻る { インストール(アプリ: 任意) { app.provide(メインストアSky、ストア) }, } } export const useStore = (): any => { // 他のコンポーネントはこのメソッドを使用してストアオブジェクトを取得します return inject(mainStoreSky) } mapState、mapMutations、mapActions メソッドの実装エクスポートconst mapState = () => { 定数ストア = useStore() ストアの状態を返す } エクスポート const mapActions = (イベント名: 文字列) => { 定数ストア = useStore() return (...args: any[]) => store.dispatch(eventName, ...args) } エクスポートconst mapMutations = (eventName: string) => { 定数ストア = useStore() return (...args: any[]) => store.commit(eventName, ...args) } コンポーネントで使用される// ストア/インデックス.ts '../sky-vuex/index' から {createStore} をインポートします。 エクスポートデフォルトcreateStore({ 州: { 年齢: 18 }, 突然変異: setAge(状態: 任意、データ: 数値) { state.age = データ } }, }) // ホーム.vue <テンプレート> <div class="home"> <button @click="handleAge(23)">データの変更</button> <h1>{{ 状態.年齢 }}</h1> </div> </テンプレート> <script lang="ts"> 'vue' から {defineComponent} をインポートします。 '@/sky-vuex/index' から { useStore、mapActions、mapMutations } をインポートします。 エクスポートデフォルトdefineComponent({ 名前: 'ホーム'、 設定() { 定数ストア = useStore() 定数 handleAge = mapMutations('setAge') // 定数 handleAge = mapActions('setAge') // 定数 handleAge = () => { // store.dispatch('setAge', 5) // } 戻る { 状態: store.state、 ハンドル年齢、 } }, }) </スクリプト> 要約するここまでで、基本的なVuexの機能が実装されました。ご自身で実践して最適化してみてください。ご不明な点がございましたら、お気軽にお問い合わせください。 これで、vue3 の provide を使用して状態管理を実装する方法についての説明は終了です。vue3 provide を使用して状態管理を実装する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: HTML テーブル マークアップ チュートリアル (9): セル間隔属性 CELLSPACING
>>: Brotli圧縮アルゴリズムを有効にするNginxの実装プロセスの詳細な説明
Linux システムでは、環境変数は適用範囲に応じて、システムレベルの環境変数とユーザーレベルの環境...
DNSとはDNS の正式名称は Domain Name System で、ドメイン名解決システムを意...
1. サーバー環境の構成: 1. ディスクパーティションを確認します。最近、あるプロジェクト内のサー...
1. 基本的な文法コードをコピーコードは次のとおりです。埋め込み src=url注: 埋め込みはさま...
ElementUIページングコンポーネントPagination in Vueの使用は参考になります。...
目次Vue が DOM を非同期更新する原理1 実際の DOM 要素を取得できるのはいつですか? 2...
● 新しいプロジェクトのセキュリティを確保するためにクラウド データを購入する予定でした。 Alib...
定義と使用方法:コンポーネントのテンプレートでスロットタグの定義を使用します。デフォルトの表示値は、...
1. まず、2つ以上の隣接する通常フローブロック要素の垂直マージンの崩壊を引き起こす原因を知る必要が...
目次1. Dockerはリモートアクセスを可能にする2. Intellij IDEAにDockerプ...
1. Nginxのインストール手順1.1 公式サイトの紹介http://nginx.org/en/d...
Samba サービスでも NFS サービスでも、サーバーの起動時にリモート共有リソースが自動的にマ...
Mysql マスタースレーブ同期の Last_IO_Errno:1236 エラーの原因は何ですか? ...
概要: MySQL のパフォーマンス最適化について話すとき、誰もがクエリ パフォーマンスを向上させる...
目次1. HTMLを書く、最初のVueプログラムビューテンプレートとデータに注意してください決定ルー...