国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)

這篇具有很好參考價(jià)值的文章主要介紹了Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

多組件共享數(shù)據(jù)

我們現(xiàn)在想實(shí)現(xiàn)這種情況:
Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)

Person組件的總?cè)藬?shù)就是Person中列表的長(zhǎng)度

br上的是Count組件,br下的是Person組件。

我們通過(guò)vuex中的state實(shí)現(xiàn)一些數(shù)據(jù)的多組件共享:Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)

代碼實(shí)現(xiàn)

Person.vue

<template>
	<div>
		<h1>人員列表</h1>
		<h3 style="color:red">Count組件求和為:{{sum}}</h3>
		<input type="text" placeholder="請(qǐng)輸入名字" v-model="name">
		<button @click="add">添加</button>
		<ul>
			<li v-for="p in personList" :key="p.id">{{p.name}}</li>
		</ul>
	</div>
</template>

<script>
	import {nanoid} from 'nanoid'
	export default {
		name:'Person',
		data() {
			return {
				name:''
			}
		},
		computed:{
			personList(){
				return this.$store.state.personList
			},
			sum(){
				return this.$store.state.sum
			}
		},
		methods: {
			add(){
				const personObj = {id:nanoid(),name:this.name}
				this.$store.commit('ADD_PERSON',personObj)
				this.name = ''
			}
		},
	}
</script>

注意點(diǎn):

這里使用了id生成類nanoid,如果要使用先安裝包

yarn add nanoid
或者
npm install nanoid

使用方法:

import { nanoid } from 'nanoid'
const person = {name:'張三', age:18}
// 最后用nanoid給它添加一個(gè)id
person.id = nanoid() //=> "V1StGXR8_Z5jdHi6B-myT"

Count.vue

<template>
	<div>
		<h1>當(dāng)前求和為:{{sum}}</h1>
		<h3>當(dāng)前求和放大10倍為:{{bigSum}}</h3>
		<h3>我在{{school}},學(xué)習(xí){{subject}}</h3>
		<h3 style="color:red">Person組件的總?cè)藬?shù)是:{{personList.length}}</h3>
		<select v-model.number="n">
			<option value="1">1</option>
			<option value="2">2</option>
			<option value="3">3</option>
		</select>
		<button @click="increment(n)">+</button>
		<button @click="decrement(n)">-</button>
		<button @click="incrementOdd(n)">當(dāng)前求和為奇數(shù)再加</button>
		<button @click="incrementWait(n)">等一等再加</button>
	</div>
</template>

<script>
	import {mapState,mapGetters,mapMutations,mapActions} from 'vuex'
	export default {
		name:'Count',
		data() {
			return {
				n:1, //用戶選擇的數(shù)字
			}
		},
		computed:{
			//借助mapState生成計(jì)算屬性,從state中讀取數(shù)據(jù)。(數(shù)組寫法)
			...mapState(['sum','school','subject','personList']),
			//借助mapGetters生成計(jì)算屬性,從getters中讀取數(shù)據(jù)。(數(shù)組寫法)
			...mapGetters(['bigSum'])
		},
		methods: {
			//借助mapMutations生成對(duì)應(yīng)的方法,方法中會(huì)調(diào)用commit去聯(lián)系mutations(對(duì)象寫法)
			...mapMutations({increment:'JIA',decrement:'JIAN'}),
			//借助mapActions生成對(duì)應(yīng)的方法,方法中會(huì)調(diào)用dispatch去聯(lián)系actions(對(duì)象寫法)
			...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
		},
		mounted() {
			// const x = mapState({he:'sum',xuexiao:'school',xueke:'subject'})
			// console.log(x)
		},
	}
</script>

<style lang="css">
	button{
		margin-left: 5px;
	}
</style>

store

//該文件用于創(chuàng)建Vuex中最為核心的store
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
//應(yīng)用Vuex插件
Vue.use(Vuex)

//準(zhǔn)備actions——用于響應(yīng)組件中的動(dòng)作
const actions = {
	/* jia(context,value){
		console.log('actions中的jia被調(diào)用了')
		context.commit('JIA',value)
	},
	jian(context,value){
		console.log('actions中的jian被調(diào)用了')
		context.commit('JIAN',value)
	}, */
	jiaOdd(context,value){
		console.log('actions中的jiaOdd被調(diào)用了')
		if(context.state.sum % 2){
			context.commit('JIA',value)
		}
	},
	jiaWait(context,value){
		console.log('actions中的jiaWait被調(diào)用了')
		setTimeout(()=>{
			context.commit('JIA',value)
		},500)
	}
}
//準(zhǔn)備mutations——用于操作數(shù)據(jù)(state)
const mutations = {
	JIA(state,value){
		console.log('mutations中的JIA被調(diào)用了')
		state.sum += value
	},
	JIAN(state,value){
		console.log('mutations中的JIAN被調(diào)用了')
		state.sum -= value
	},
	ADD_PERSON(state,value){
		console.log('mutations中的ADD_PERSON被調(diào)用了')
		state.personList.unshift(value)
	}
}
//準(zhǔn)備state——用于存儲(chǔ)數(shù)據(jù)
const state = {
	sum:0, //當(dāng)前的和
	school:'尚硅谷',
	subject:'前端',
	personList:[
		{id:'001',name:'張三'}
	]
}
//準(zhǔn)備getters——用于將state中的數(shù)據(jù)進(jìn)行加工
const getters = {
	bigSum(state){
		return state.sum*10
	}
}

//創(chuàng)建并暴露store
export default new Vuex.Store({
	actions,
	mutations,
	state,
	getters
})

Vuex模塊化

我們查看我們前面的代碼不難發(fā)現(xiàn)一個(gè)問(wèn)題:那就是多個(gè)組件的代碼都放在了唯一的actions、mutations、state、getters中,我們前面的案例中只涉及到了兩個(gè)組件,但是如果我們有幾百個(gè)幾千個(gè)組件,這些代碼全部堆積到一起,會(huì)非常的繁雜。所以我們想對(duì)他進(jìn)行一個(gè)分類,將各組件的代碼分離開來(lái)。

原來(lái)我們是這樣:
Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)

現(xiàn)在我們變成這樣:
Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)
每個(gè)配置里面都有其各自的actions、mutations、state、getters。

也就是說(shuō)現(xiàn)在的store結(jié)構(gòu)發(fā)生了變化:
Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)

當(dāng)然這個(gè)a,b起的有點(diǎn)隨便,我們稍微語(yǔ)義化一下:
Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)

因?yàn)榻涌诒┞兜男问桨l(fā)生了變化,接下來(lái)我們的組件里面就要發(fā)生一些變化。

先來(lái)看看Count.vue:

原來(lái)是這樣:
Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)
現(xiàn)在變成了這樣:
Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)

還有一種方法:
Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)

最后我們還有最重要的一步:給配置的命名空間打開。
Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)
如果我們?nèi)笔Я诉@一步,這些map的第一個(gè)參數(shù),countAbout、personAbout這些是識(shí)別不出來(lái)的!

		computed:{
			//借助mapState生成計(jì)算屬性,從state中讀取數(shù)據(jù)。(數(shù)組寫法)
			...mapState('countAbout',['sum','school','subject']),
			...mapState('personAbout',['personList']),
			//借助mapGetters生成計(jì)算屬性,從getters中讀取數(shù)據(jù)。(數(shù)組寫法)
			...mapGetters('countAbout',['bigSum'])
		},
		methods: {
			//借助mapMutations生成對(duì)應(yīng)的方法,方法中會(huì)調(diào)用commit去聯(lián)系mutations(對(duì)象寫法)
			...mapMutations('countAbout',{increment:'JIA',decrement:'JIAN'}),
			//借助mapActions生成對(duì)應(yīng)的方法,方法中會(huì)調(diào)用dispatch去聯(lián)系actions(對(duì)象寫法)
			...mapActions('countAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
		},

接下來(lái)我們修改Person.vue,這里我們不使用map方法,而是使用原生的方法看看怎么修改:
Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)
我們上面的firstPersonName這樣寫是因?yàn)椋?br> 我們?cè)瓉?lái)store里的state是長(zhǎng)這樣的:
Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)
但是現(xiàn)在我們store里的getters是長(zhǎng)這樣的:
Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)
也就是他的key變成了這種形式,但是我們?cè)谑褂玫膶?duì)象的屬性的時(shí)候如果使用的是.這種語(yǔ)法那么這個(gè)/是不能使用的,憑借js語(yǔ)法的特性我們可以使用[]語(yǔ)法去訪問(wèn)它的屬性。

Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)

最后我們還可以對(duì)最后一次優(yōu)化,那就是把分類后的代碼分文件放置:
Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)

我們來(lái)看看這幾個(gè)文件:

count.js

//求和相關(guān)的配置
export default {
	namespaced:true,
	actions:{
		jiaOdd(context,value){
			console.log('actions中的jiaOdd被調(diào)用了')
			if(context.state.sum % 2){
				context.commit('JIA',value)
			}
		},
		jiaWait(context,value){
			console.log('actions中的jiaWait被調(diào)用了')
			setTimeout(()=>{
				context.commit('JIA',value)
			},500)
		}
	},
	mutations:{
		JIA(state,value){
			console.log('mutations中的JIA被調(diào)用了')
			state.sum += value
		},
		JIAN(state,value){
			console.log('mutations中的JIAN被調(diào)用了')
			state.sum -= value
		},
	},
	state:{
		sum:0, //當(dāng)前的和
		school:'尚硅谷',
		subject:'前端',
	},
	getters:{
		bigSum(state){
			return state.sum*10
		}
	},
}

person.js

//人員管理相關(guān)的配置
import axios from 'axios'
import { nanoid } from 'nanoid'
export default {
	namespaced:true,
	actions:{
		addPersonWang(context,value){
			if(value.name.indexOf('王') === 0){
				context.commit('ADD_PERSON',value)
			}else{
				alert('添加的人必須姓王!')
			}
		},
		addPersonServer(context){
			axios.get('https://api.uixsj.cn/hitokoto/get?type=social').then(
				response => {
					context.commit('ADD_PERSON',{id:nanoid(),name:response.data})
				},
				error => {
					alert(error.message)
				}
			)
		}
	},
	mutations:{
		ADD_PERSON(state,value){
			console.log('mutations中的ADD_PERSON被調(diào)用了')
			state.personList.unshift(value)
		}
	},
	state:{
		personList:[
			{id:'001',name:'張三'}
		]
	},
	getters:{
		firstPersonName(state){
			return state.personList[0].name
		}
	},
}

index.js

//該文件用于創(chuàng)建Vuex中最為核心的store
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
import countOptions from './count'
import personOptions from './person'
//應(yīng)用Vuex插件
Vue.use(Vuex)

//創(chuàng)建并暴露store
export default new Vuex.Store({
	modules:{
		countAbout:countOptions,
		personAbout:personOptions
	}
})

總結(jié)

模塊化+命名空間

  1. 目的:讓代碼更好維護(hù),讓多種數(shù)據(jù)分類更加明確。

  2. 修改store.js

    const countAbout = {
      namespaced:true,//開啟命名空間
      state:{x:1},
      mutations: { ... },
      actions: { ... },
      getters: {
        bigSum(state){
           return state.sum * 10
        }
      }
    }
    
    const personAbout = {
      namespaced:true,//開啟命名空間
      state:{ ... },
      mutations: { ... },
      actions: { ... }
    }
    
    const store = new Vuex.Store({
      modules: {
        countAbout,
        personAbout
      }
    })
    
  3. 開啟命名空間后,組件中讀取state數(shù)據(jù):

    //方式一:自己直接讀取
    this.$store.state.personAbout.list
    //方式二:借助mapState讀?。?/span>
    ...mapState('countAbout',['sum','school','subject']),
    
  4. 開啟命名空間后,組件中讀取getters數(shù)據(jù):

    //方式一:自己直接讀取
    this.$store.getters['personAbout/firstPersonName']
    //方式二:借助mapGetters讀取:
    ...mapGetters('countAbout',['bigSum'])
    
  5. 開啟命名空間后,組件中調(diào)用dispatch

    //方式一:自己直接dispatch
    this.$store.dispatch('personAbout/addPersonWang',person)
    //方式二:借助mapActions:
    ...mapActions('countAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
    
  6. 開啟命名空間后,組件中調(diào)用commit文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-415394.html

    //方式一:自己直接commit
    this.$store.commit('personAbout/ADD_PERSON',person)
    //方式二:借助mapMutations:
    ...mapMutations('countAbout',{increment:'JIA',decrement:'JIAN'}),
    

到了這里,關(guān)于Vuex④(多組件共享數(shù)據(jù)、Vuex模塊化+namespace)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 模塊化與組件化:開發(fā)中的雙劍合璧

    模塊化與組件化:開發(fā)中的雙劍合璧

    在現(xiàn)代軟件開發(fā)中,隨著項(xiàng)目規(guī)模的增長(zhǎng)和技術(shù)的復(fù)雜性增加,如何有效地組織和管理代碼變得越來(lái)越重要。模塊化與組件化作為兩種主要的代碼組織方法,為開發(fā)者提供了有效的工具,幫助他們創(chuàng)建可維護(hù)、可擴(kuò)展和高效的應(yīng)用程序。這兩種方法不僅提高了代碼的可讀性和

    2024年02月11日
    瀏覽(12)
  • 現(xiàn)代化 Android 開發(fā):組件化與模塊化的抉擇

    作者:古哥E下 項(xiàng)目初始的時(shí)候,一般都是使用一個(gè)分層架構(gòu),接入各種框架,然后就寫業(yè)務(wù)代碼。但如果項(xiàng)目慢慢變大,那就會(huì)出現(xiàn)很多項(xiàng)目管理的問(wèn)題,諸如: 1.代碼復(fù)用與抽象問(wèn)題 2.編譯速度問(wèn)題 3.版本迭代速度問(wèn)題 所以組件化、模塊化、動(dòng)態(tài)化、插件化、跨平臺(tái)等各

    2024年02月11日
    瀏覽(26)
  • 前端組件封裝:構(gòu)建模塊化、可維護(hù)和可重用的前端應(yīng)用

    前端開發(fā)領(lǐng)域的快速演進(jìn)已經(jīng)將前端應(yīng)用的規(guī)模和復(fù)雜性提升到了一個(gè)新的水平。在這個(gè)背景下,前端組件封裝成為了一項(xiàng)關(guān)鍵實(shí)踐,旨在構(gòu)建模塊化、可維護(hù)和可重用的前端應(yīng)用。在本文中,我們將深入研究前端組件封裝的重要性、設(shè)計(jì)原則、常見封裝模式以及如何在實(shí)際

    2024年02月07日
    瀏覽(26)
  • 前端工程化實(shí)戰(zhàn):React 模塊化開發(fā)、性能優(yōu)化和組件化實(shí)踐

    前端工程化實(shí)戰(zhàn)是指通過(guò)組織工作流程、使用工具和技術(shù)來(lái)提高前端開發(fā)效率和質(zhì)量的一種方法。常見的前端工程化實(shí)踐包括模塊化開發(fā)、自動(dòng)化構(gòu)建、代碼檢查和測(cè)試、性能優(yōu)化等。下面將簡(jiǎn)要介紹模塊化開發(fā)、性能優(yōu)化和組件化實(shí)踐。 模塊化開發(fā) 在 React 中實(shí)現(xiàn)模塊化開

    2023年04月10日
    瀏覽(100)
  • 一篇讀懂 Android 開發(fā)中模塊化、組件化、插件化和熱修復(fù)

    一篇讀懂 Android 開發(fā)中模塊化、組件化、插件化和熱修復(fù)

    網(wǎng)上關(guān)于 “Android 開發(fā)\\\" 的文章很多,我本人學(xué)習(xí) Android 開發(fā)的過(guò)程也借鑒了網(wǎng)上先輩們的文章;但大多數(shù)文章都從底層的細(xì)枝末節(jié)開始講述,由下而上給人一種這門技術(shù)“博大精深”望而生畏的感覺;而我寫這篇文章的初衷就是由上而下,希望別人在閱讀的過(guò)程中能夠覺得

    2023年04月08日
    瀏覽(24)
  • 【微信小程序開發(fā)】學(xué)習(xí)小程序的模塊化開發(fā)(自定義組件和分包加載)

    【微信小程序開發(fā)】學(xué)習(xí)小程序的模塊化開發(fā)(自定義組件和分包加載)

    模塊化開發(fā)是一種將復(fù)雜的應(yīng)用程序分解為一系列獨(dú)立的模塊,每個(gè)模塊負(fù)責(zé)完成特定的功能的開發(fā)方式。模塊化開發(fā)可以提高代碼的可維護(hù)性和可復(fù)用性,使開發(fā)過(guò)程更加高效和靈活。 模塊化開發(fā)在軟件開發(fā)領(lǐng)域中被廣泛應(yīng)用,其重要性和優(yōu)勢(shì)不言而喻。 首先,模塊化開

    2024年02月05日
    瀏覽(75)
  • Pytest測(cè)試技巧之Fixture:模塊化管理測(cè)試數(shù)據(jù)

    Pytest測(cè)試技巧之Fixture:模塊化管理測(cè)試數(shù)據(jù)

    在 Pytest 測(cè)試中,有效管理測(cè)試數(shù)據(jù)是提高測(cè)試質(zhì)量和可維護(hù)性的關(guān)鍵。本文將深入探討 Pytest 中的 Fixture,特別是如何利用 Fixture 實(shí)現(xiàn)測(cè)試數(shù)據(jù)的模塊化管理,以提高測(cè)試用例的清晰度和可復(fù)用性。 ?什么是Fixture? 在 Pytest 中,F(xiàn)ixture 是一種用于為測(cè)試用例提供設(shè)置和資源的

    2024年02月22日
    瀏覽(26)
  • 大型Android項(xiàng)目架構(gòu):基于組件化+模塊化+Kotlin+協(xié)程+Flow+Retrofit+Jetpack+MVVM架構(gòu)實(shí)現(xiàn)WanAndroid客戶端

    大型Android項(xiàng)目架構(gòu):基于組件化+模塊化+Kotlin+協(xié)程+Flow+Retrofit+Jetpack+MVVM架構(gòu)實(shí)現(xiàn)WanAndroid客戶端

    前言:茍有恒,何必三更眠五更起;最無(wú)益,莫過(guò)一日曝十日寒。 之前一直想寫個(gè) WanAndroid 項(xiàng)目來(lái)鞏固自己對(duì) Kotlin+Jetpack+協(xié)程 等知識(shí)的學(xué)習(xí),但是一直沒有時(shí)間。這里重新行動(dòng)起來(lái),從項(xiàng)目搭建到完成前前后后用了兩個(gè)月時(shí)間,平常時(shí)間比較少,基本上都是只能利用零碎的

    2024年02月09日
    瀏覽(27)
  • 微信小程序:tabbar、事件綁定、數(shù)據(jù)綁定、模塊化、模板語(yǔ)法、尺寸單位

    微信小程序:tabbar、事件綁定、數(shù)據(jù)綁定、模塊化、模板語(yǔ)法、尺寸單位

    目錄 1. tabbar 1.1 什么是tabbar ?1.2 配置tabbar? 2. 事件綁定 2.1 準(zhǔn)備表單 2.2 事件綁定 2.3 冒泡事件及非冒泡事件? 3. 數(shù)據(jù)綁定 3.1 官方文檔 4. 關(guān)于模塊化 5. 模板語(yǔ)法 6. 尺寸單位 下圖中標(biāo)記出來(lái)的部分即為tabbar: ? ?官方說(shuō)明文檔: ? 說(shuō)明: pagePath中指定的頁(yè)面,必須在app.jso

    2024年02月04日
    瀏覽(94)
  • 解讀數(shù)據(jù)可用性賽道:如何講好模塊化區(qū)塊鏈的敘事?

    解讀數(shù)據(jù)可用性賽道:如何講好模塊化區(qū)塊鏈的敘事?

    數(shù)據(jù)可用性(Data Availability)主要存在于輕客戶端節(jié)點(diǎn)相對(duì)全節(jié)點(diǎn)的語(yǔ)境下。對(duì)于輕客戶端節(jié)點(diǎn)的數(shù)據(jù)可用性問(wèn)題,行業(yè)內(nèi)已經(jīng)達(dá)成共識(shí)——采用糾刪碼(erasure codes)來(lái)解決。 不僅輕客戶端節(jié)點(diǎn)有數(shù)據(jù)可用性問(wèn)題,Layer1+Layer2 的敘事也好,Modular Blockchain 的敘事也罷,都會(huì)存在

    2024年02月08日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包