Vuexのカウンタ状態の複数

インストール

インストールVUE-cliのNPM I -g VUE-CLI

ビルドディレクトリVUEのinitのWebPACK

開発環境NPMの実行DEVを開始

スタートコマンド

NPM -g VUE-CLIをインストール

ビューのWebPACKのinit-プロジェクトビュー

CDプロジェクトビュー

NPM実行DEV

VUE-cliの単一ファイルコンポーネント

リングの使用コンポーネント:コンポーネントの導入、登録コンポーネントは、コンポーネントを使用します

はじめ手段:「./components/hello」からインポートこんにちは

登録コンポーネント:コンポーネント:{こんにちは:こんにちは}

使用コンポーネント:

Vuex

1.集中ストレージ管理状態
予測可能な方法で変化する2

過渡状態の内部構成要素:(データフィールド)に使用状態のみ一成分
アプリケーションレベルのステータス:共通の構成要素の複数のステータス

どのような状況Vuexの使用では
1.複数のビューは同じ状態に依存
変更する同じ状態のニーズの異なるビューから2行動

インストールVuex
NPM I vuex -save

下記のsrcフォルダ内stroeフォルダを作成するには、
その後、次のフォルダストアインデックス、JSファイルの作成、
コンポーネントのindex.jsの導入を

import Vue from 'vue'
import Vuex from 'vuex'

プラグとして使用
Vue.use(Vuex)

次に、ルート・インスタンス内部に注入Main.js
注入ルートインスタンス
{店}

コンポーネントに保管
index.jsフォルダ定義された状態ストアで

let store = new Vuex.Store({
	//定义应用的单一状态书,用一个对象就包含了全部的应用层级转态
	state: {
		count: 110		//定义一个状态
	}
})

状態を使用するコンポーネントでは、2つの方法があります

<script>
	export default {
		//data 只能在本组件被改变
		data() {
			return {
				n: this.$store.state.count	//n的初始值从vuex的state中拿
			}
		}
	}
</script>

若しくは

<p></p>

##ステータス変更

突然変異(状態を変更するための唯一の方法):変更ステータスには、記録することができる突然変異にコミットする必要があり、変異状態を同時に更新する必要があります。

アクション(非同期動作):農産物結果に非同期操作;アクションが直接状態を変更するのではなく、突然変異を提出しています

突然変異状態の変更

index.jsは、ストアのステータスを変更します

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex);

//定义store
//vuex中的状态是响应的

let store = new Vuex.Store({
	state: {
		count: 110		//定义一个状态
	},
	mutations: {
		updatedCount(state, payload) {	//改变state状态
			state.count += payload.add;
		}
	}
})

export default store

変更をコミットコミット

<script>
	export default {
		methods: {
			changeCount() 大专栏  多个计数器在Vuex中的状态ss="p">{
				this.$store.commit('updatedCount',{
					add: 30
				})
			}
		}
	}
</script>
//getter(派发的状态): 抽离操作转态的逻辑,可被多组件使用
	getters : {
		totals(state){
			//reduce 数组的方法
			//reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值,0表示和初始值为0.
			return state.shopList.reduce((n,item) => n + item.count,0)
		}
	}

アクション(非同期動作):農産物結果に非同期操作;アクションが直接状態を変更するのではなく、突然変異を提出しています

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex);

//mock数据
const shopList = [
	{
		id: 123,
		count: 2,
	},
	{
		id: 456,
		count: 3
	}
]

//定义store
//vuex中的状态是响应的

let store = new Vuex.Store({
	//定义应用的单一状态书,用一个对象就包含了全部的应用层级转态
	state: {
		shopList		//定义一个状态
	},

	//getter(派发的状态): 抽离操作转态的逻辑,可被多组件使用
	getters : {
		totals(state){
			//reduce 数组的方法
			//reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值,0表示和初始值为0.
			return state.shopList.reduce((n,item) => n + item.count,0)
		}
	},

	//要使改变状态可被记录,必须要commit一个mutation; mutation必须是同步更新转态.
	mutations: {
		//只要提交mutation就有记录,如果mutation中有异步操作,记录的还是之前的值
		updatedCountById(state,payload) {	//改变state状态
			
			/*setTimeout(() => {
				let item = state.shopList.find(item => item.id == payload.id)
				item.count += 1;
			},3000);*/

			let item = state.shopList.find(item => item.id == payload.id);
			item.count += 1;
			
		},
		reduceCountById(state,payload) {
			let item = state.shopList.find(item => item.id == payload.id)
			console.log(payload)
			if(item.count <= 0 ){
				alert('数量不能少于0');
				return false;
			}
			item.count -=1;
		}
	},
	actions: {
		updateCountAction(store, parmas) {
			//异步操作放在这里
			setTimeout(() => {
				store.commit('updatedCountById', parmas)
			},1000)
		}
	}
})

export default store

vuex使用の法理

原則:

  1. 各アプリケーションのインスタンスだけで店を含むことになります
  2. 店舗のステータスを変更する唯一の方法は、変異を提出することです
  3. 突然変異は、機能を同期させる必要があります
  4. アクションは、任意の非同期操作を含むことができ
  5. アクションは、直接、状態を変更するのではなく、突然変異を提出しています

githubの住所:https://github.com/yyyyama/Vue-Project

おすすめ

転載: www.cnblogs.com/lijianming180/p/12302268.html