序文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の実装プロセスの詳細な説明
目次1. ランダムなブール値( true / false )を取得する2. 指定された日付が営業日で...
バージョン1.4.2公式ドキュメントドッカーハブ起動する環境変数SEATA_CONFIG_NAMEを...
プロジェクトの作業を開始するときは、ワイヤーフレームを使用してアイデアをスケッチすることが重要です。...
数日前に CentOS8 がリリースされました。8 の最初のバージョンですが、今日は VM12 に ...
プログラマーが日常的に TypeScript/JavaScript 開発を行う場合、複雑な Java...
目次01. リスナーウォッチ(1)機能(2)特性と方法(3)監視対象(4)リスニングアレイ02. 計...
ページを作成するときに、記述した CSS スタイルが有効にならないことがあります。この現象にはさまざ...
今日、Ubuntu 用の小さなツールを顧客に送りましたが、ユーザーはそれを受け取った後、実行できませ...
MySQLはインストール版と無料インストール版に分かれていますインストール版の拡張子はmsi、無料イ...
目次ERR 1067による殺人事件2番目の問題の原因はsql_modeです3. sql_modeを設...
この記事では、例を使用して、MySQL の水平テーブルと垂直テーブル間の変換操作を実装する方法を説明...
最近、弁護士推薦のウェブサイトを作成していたのですが、検索ボックスに問題がありました。検索ボックス内...
HTMLの動作原理: 1. ローカル操作: ブラウザでhtmlファイルを開く2. リモートアクセス...
時刻、文字列、タイムスタンプ間の変換は、日常生活でよく使用されます。よく使用されますが、私は使用する...
データとコンピューターに対してできる最善のことは、それらを安全に保つことです。アップデートを有効にす...