序文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の実装プロセスの詳細な説明
現在のトランザクションはどの履歴バージョンを読み取ることができますか?読み取りビューは、トランザクシ...
Docker コンテナ間の相互接続と通信には 3 つの方法があります。 Docker 内部ネットワー...
MySQLは次のエラーを表示します「コントロール パネル -> 管理ツール -> サービ...
この記事では、参考までに、Navicatを使用してCSVファイルをMySQLにインポートするための具...
Mysql は、高性能なデータ ストレージ サービスを提供する主流のオープン ソース リレーショナル...
1. ファイル名検索を実行するwhich ('実行可能ファイル' を検索) //PA...
目次JSBridgeの起源JSBridgeの双方向通信原理JSはネイティブを呼び出すネイティブコール...
目次主に使用されるPostmanの機能データの暗号化と復号化さまざまなパラメータ設定実際に送信された...
フレックスレイアウトFlex は Flexible Box の略で、「柔軟なレイアウト」を意味します...
この記事では、例を使用して、データベースを削除せずに MySQL 内のすべてのテーブルをすばやく削除...
目次背景質問問題分析と解決策新たな問題問題分析と解決策背景node-schedule スケジュール ...
<br />ナビゲーションとは、ウェブサイトの上部にあることが多いナビゲーション バーの...
序文データベース トランザクションに関して言えば、トランザクションの ACID 特性、分離レベル、解...
AOP の紹介AOP (アスペクト指向プログラミング) の主な機能は、コアビジネスロジックモジュール...
ソフトウェアバージョンウィンドウズ: ウィンドウズ10 MySQL: mysql-8.0.16-wi...