Vuex のモジュール化と名前空間の例のデモ

Vuex のモジュール化と名前空間の例のデモ

1. 目的:

コードの保守が容易になり、さまざまなデータの分類が明確になります。

2. store/index.jsを変更する

ストア/index.js

定数countAbout = {
  namespaced:true, //名前空間を開く状態:{x:1},
  変異: { ... },
  アクション: { ... },
  ゲッター: {
    bigSum(状態){
       状態合計 * 10 を返す
    }
  }
}

const personAbout = {
  namespaced:true, //名前空間を開く state:{ ... },
  変異: { ... },
  アクション: { ... }
}

定数ストア = 新しい Vuex.Store({
  モジュール:
    countAbout、
    人について
  }
})

注: namespaced:true,名前空間を有効にします

3. 名前空間を開いた後、コンポーネント内の状態データを読み取ります。

//方法 1: this.$store.state.personAbout.list を直接読み取る


//方法 2: mapState で読み取る:
...mapState('countAbout',['sum','school','subject']),

4. 名前空間を開いた後、コンポーネント内のゲッター データを読み取ります。

//方法1: this.$store.getters['personAbout/firstPersonName']を直接読み取る

//方法 2: mapGetters で読み取る:
...mapGetters('countAbout',['bigSum'])

5. 名前空間を開いた後、コンポーネント内でディスパッチを呼び出す

//方法1: 直接ディスパッチする
this.$store.dispatch('personAbout/addPersonWang',person)


//方法 2: mapActions を使用する場合:
...mapActions('countAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'})

名前空間を開いた後、コンポーネント内でcommitを呼び出す

//方法1: 直接コミットする
this.$store.commit('personAbout/ADD_PERSON',person)


//方法 2: mapMutations を使用する場合:
...mapMutations('countAbout',{増分:'JIA',減分:'JIAN'}),

例:

フェニックス:

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

合計コード:

ここに画像の説明を挿入

メイン.js

//Vue の紹介
'vue' から Vue をインポートします
//アプリの紹介
'./App.vue' からアプリをインポートします。
//店舗紹介
'./store' からストアをインポートします

//Vue のプロダクションプロンプトをオフにする Vue.config.productionTip = false

//VM を作成
新しいVue({
	el:'#app',
	レンダリング: h => h(App),
	店、
	作成前() {
		Vue.prototype.$bus = これ
	}
})

アプリ

<テンプレート>
	<div>
		<カウント/>
		<時間>
		<人物/>
	</div>
</テンプレート>

<スクリプト>
	'./components/Count' から Count をインポートします。
	'./components/Person' から Person をインポートします。

	エクスポートデフォルト{
		名前:'アプリ',
		コンポーネント:{Count,Person},
	}
</スクリプト>

ストア/index.js

//このファイルはVuexのコアストアを作成するために使用されます
'vue' から Vue をインポートします
//Vuex の紹介
'vuex' から Vuex をインポートします
countOptions を './count' からインポートします。
'./person' から personOptions をインポートします。
//Vuex プラグインを適用する Vue.use(Vuex)

//ストアを作成して公開する
デフォルトの新しいVuex.Storeをエクスポートします({
	モジュール:{
		countAbout:countOptions、
		personAbout:personオプション
	}
})

ストア/count.js

//関連設定をエクスポートするデフォルト{
	名前空間:true、
	アクション:{
		jiaOdd(コンテキスト,値){
			console.log('アクション内のjiaOddが呼び出されます')
			if(context.state.sum % 2){
				context.commit('JIA',値)
			}
		},
		jiaWait(コンテキスト,値){
			console.log('アクション内のjiaWaitが呼び出されました')
			タイムアウトを設定します(()=>{
				context.commit('JIA',値)
			},500)
		}
	},
	突然変異:
		JIA(状態,値){
			console.log('突然変異のJIAが呼び出されます')
			状態.合計 += 値
		},
		JIAN(状態,値){
			console.log('突然変異のJIANが呼び出されます')
			状態.合計 -= 値
		},
	},
	州:{
		sum:0, //現在の合計 school:'Shang Silicon Valley',
		件名:「フロントエンド」、
	},
	ゲッター:{
		bigSum(状態){
			状態.合計*10を返す
		}
	},
}

ストア/person.js

//人事管理関連の設定 import axios from 'axios'
'nanoid' から {nanoid } をインポートします
エクスポートデフォルト{
	名前空間:true、
	アクション:{
		addPersonWang(コンテキスト、値){
			if(value.name.indexOf('王') === 0){
				context.commit('ADD_PERSON',値)
			}それ以外{
				alert('追加する人物は王姓である必要があります!')
			}
		},
		addPersonServer(コンテキスト){
			axios.get('https://api.uixsj.cn/hitokoto/get?type=social').then(
				レスポンス => {
					context.commit('ADD_PERSON',{id:nanoid(),name:response.data})
				},
				エラー => {
					アラート(エラー.メッセージ)
				}
			)
		}
	},
	突然変異:
		ADD_PERSON(状態,値){
			console.log('ミューテーションのADD_PERSONが呼び出されます')
			state.personList.unshift(値)
		}
	},
	州:{
		人リスト:[
			{id:'001',name:'张三'}
		]
	},
	ゲッター:{
		firstPersonName(州){
			state.personList[0].nameを返す
		}
	},
}

コンポーネント/Count.vue

<テンプレート>
	<div>
		<h1>現在の合計: {{sum}}</h1>
		<h3>現在の合計は 10 倍に拡大されます: {{bigSum}}</h3>
		<h3>私は{{school}}に通っていて、{{subject}}を勉強しています。}</h3>
		<h3 style="color:red">Person コンポーネント内の人数の合計は: {{personList.length}}</h3>
		<v-model.number="n">を選択します。
			<オプション値="1">1</オプション>
			<オプション値="2">2</オプション>
			<オプション値="3">3</オプション>
		</選択>
		<button @click="increment(n)">+</button>
		<button @click="decrement(n)">-</button>
		<button @click="incrementOdd(n)">現在の合計が奇数の場合は加算します</button>
		<button @click="incrementWait(n)">追加する前にしばらくお待ちください</button>
	</div>
</テンプレート>

<スクリプト>
	'vuex' から {mapState、mapGetters、mapMutations、mapActions} をインポートします。
	エクスポートデフォルト{
		名前:'カウント',
		データ() {
			戻る {
				n:1, //ユーザーが選択した番号 }
		},
		計算:{
			//mapState を使用して計算プロパティを生成し、状態からデータを読み取ります。 (配列書き込み)
			...mapState('countAbout',['sum','school','subject']),
			...mapState('personAbout',['personList']),
			// mapGetters を使用して計算プロパティを生成し、ゲッターからデータを読み取ります。 (配列書き込み)
			...mapGetters('countAbout',['bigSum'])
		},
		メソッド: {
			// mapMutations の助けを借りて対応するメソッドを生成し、commit を呼び出して変更 (オブジェクトの書き込み) に連絡します。
			...mapMutations('countAbout',{増分:'JIA',減分:'JIAN'}),
			//mapActions の助けを借りて対応するメソッドを生成し、コンタクトアクション (オブジェクトの書き込み) にディスパッチを呼び出します。
			...mapActions('countAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
		},
		マウント() {
			console.log(this.$store)
		},
	}
</スクリプト>

<スタイル lang="css">
	ボタン{
		左マージン: 5px;
	}
</スタイル>

コンポーネント/Person.vue

<テンプレート>
	<div>
		<h1>スタッフリスト</h1>
		<h3 style="color:red">Count コンポーネントの合計は次のとおりです: {{sum}}</h3>
		<h3>リストの最初の人物の名前は {{firstPersonName} です。}</h3>
		<input type="text" placeholder="お名前を入力してください" v-model="name">
		<button @click="add">追加</button>
		<button @click="addWang">姓が Wang の人を追加する</button>
		<button @click="addPersonServer">ランダムな名前で人を追加する</button>
		<ul>
			<li v-for="p in personList" :key="p.id">{{p.name}}</li>
		</ul>
	</div>
</テンプレート>

<スクリプト>
	'nanoid' から {nanoid} をインポートします
	エクスポートデフォルト{
		名前:'人',
		データ() {
			戻る {
				名前:''
			}
		},
		計算:{
			人リスト(){
				これを返します。$store.state.personAbout.personList
			},
			和(){
				これを返します。$store.state.countAbout.sum
			},
			最初の人物名(){
				this.$store.getters['personAbout/firstPersonName'] を返します。
			}
		},
		メソッド: {
			追加(){
				const personObj = {id:nanoid(),name:this.name}
				this.$store.commit('personAbout/ADD_PERSON',personObj)
				this.name = ''
			},
			追加王(){
				const personObj = {id:nanoid(),name:this.name}
				this.$store.dispatch('personAbout/addPersonWang',personObj)
				this.name = ''
			},
			追加PersonServer(){
				this.$store.dispatch('personAbout/addPersonServer')
			}
		},
	}
</スクリプト>

これで、Vuex のモジュール化と名前空間 namespaced に関するこの記事は終了です。Vuex のモジュール化と名前空間に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nuxtフレームワークでvuexのモジュール設定を実装する方法
  • Vuex での Store のモジュール分割の詳細な説明
  • 簡単な例を通してvuexとモジュール性を学ぶ
  • Vuex のモジュール性 (モジュール) の詳細な理解
  • vuex名前空間の使用
  • vuex の store の名前空間についての簡単な説明

<<:  iframe を更新する 3 つの方法

>>:  MySQL データベース インデックスの面接の質問 (基本的なプログラマー スキル)

推薦する

MySQL テーブルパーティションの使用法と基本原理の詳細な説明

目次パーティションテーブルとはパーティションテーブルの適用シナリオパーティションテーブルの制限パーテ...

jsはポップアップウィンドウをクリックすることでポップアップログインボックスを実装します

この記事では、ポップアップウィンドウをクリックしたときにポップアップログインボックスを実現するための...

MySQL 接続例外とエラー 10061 の解決方法

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...

Mysql データベースの高度なビュー、トランザクション、インデックス、自己接続、ユーザー管理の例の分析の使用

この記事では、ビュー、トランザクション、インデックス、自己接続、ユーザー管理など、MySQL データ...

Nginx の一般的な設定とテクニックの概要

序文この記事では、Nginx の一般的な、実用的で興味深い構成をいくつか紹介します。この記事を読んだ...

MySQL のインデックスの種類と基本的な使用例

目次索引- 総合索引- ユニークなインデックス- 主キーインデックス- 複合インデックス- 全文索引...

iOS WeChat H5ページのゴム反発効果の落とし穴記録

ビジネス要件最近開発したプロジェクトの一つに、WeChat公式アカウントに関連したH5ページがありま...

Linuxの簡単な分析でファイアウォールの状態と外部に開いているポートの状態を確認する

1. ファイアウォールの状態を確認するファイアウォールのステータスを確認する systemctl s...

単一の MySQL テーブルで数千万のデータを処理するアイデアを共有する

目次プロジェクトの背景改善案データ特性を観察するマルチプロセスアイデアの要約データ処理スキルプロジェ...

JavaScriptの厳密モードが8進数をサポートしていない問題の説明

JavaScript厳密モードが 8 進数をサポートしていないという問題に関して、まず、 Java...

MySQL 5.7.20 圧縮版のダウンロードとインストールの簡単なチュートリアル

1. ダウンロードアドレス:参考: http://dev.mysql.com/downloads/m...

「MySQL サービスを開始できません エラー 1069」を解決する方法

今日、外出中に同僚から、ウェブサイトのバックエンドにアクセスできないというメッセージが届きました。と...

JSホモロジー戦略とCSRFの詳細な説明

目次概要同一生成元ポリシー (SOP)相同制限クロスドメインをバイパスクロスサイトリクエストフォージ...

MySQL でデータベースを作成した後、ユーザー 'root'@'%' によるデータベース 'xxx' へのアクセスが拒否される問題を解決する

序文最近、仕事で問題が発生しました。データベースを作成した後、データベースに接続するときにエラーが発...