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 8の新機能ウィンドウ関数の役割

MySQL 8.0 の新機能は次のとおりです。 Unicode 9.0 をすぐに完全にサポートウィン...

js はマウスインとマウスアウトによるカード切り替えコンテンツを実装します

この記事では、マウスでカード内外のコンテンツを切り替えるためのjsの具体的なコードを紹介します。具体...

MySQL の CPU 負荷が高い問題のトラブルシューティング

MySQL による CPU 負荷の上昇今日の午後、MySQL によってサーバーの負荷が高くなる問題を...

CSS3 の transition、transform、translate の違いと機能の簡単な分析

変換して翻訳するTransform は、変換と変形を意味します。他の幅属性や高さ属性と同様に、CSS...

HTML の順序付きリスト、順序なしリスト、定義リストに関する簡単な説明

順序付きリストXML/HTML コードコンテンツをクリップボードにコピー<オルタイプ= &qu...

Win10にCentOS7仮想マシンをインストールする

1. VMware Workstation 64バージョンをダウンロードするhttps://www....

MySQL 8.0 のデフォルトのデータディレクトリを変更する (設定なしの簡単な操作)

使用シナリオ: Alibaba Cloud を使用しており、データディスクを別途購入しました (大容...

node.jsのインストールとHbuilderXの設定の詳細な説明

npm インストールチュートリアル: 1. Node.jsインストールパッケージをダウンロードする公...

CSS プロパティ *-gradient の実用的な価値を探る

まず興味深い性質であるconic-gradientを紹介しましょう。円錐グラデーション!円グラフの作...

JavaScript でよく使われる 5 つのオブジェクト

目次1. JavaScript オブジェクト1).配列オブジェクト2).ブールオブジェクト3).日付...

https ウェブサイトを展開し、Nginx でアドレス書き換えを構成するための詳細な手順

Nginx は、高性能な Web サイト サーバーおよびリバース プロキシ サーバーであり、IMAP...

HTML におけるスクリプトの配置に関する簡単な説明

以前は、スクリプトは HTML 内のどこにでも配置できると思っていましたが、今日、要件に取り組んでい...

border-radius 値の設定に関する質問

問題記録今日はプログレスバーに似た小さなコンポーネントを完成させるつもりでした。プロトタイプは次のよ...