Vue 学习总结笔记

Posted IT_Holmes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue 学习总结笔记相关的知识,希望对你有一定的参考价值。

文章目录

1. Vuex插件

1.1 什么是Vuex?


概念:专门在Vue中实现集中式状态(数据)管理的一个Vue的插件。

  • 与集中式对应的就是分布式。
  • 对vue应用中多个组件的共享撞他进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间的通信。

1.2 为什么要用Vuex?


全局事件总线的一个对组件数据的读写效果:

实现读,需要一对$emit ,$on ;同样需要些也是需要一对$emit ,$on。如果多个组件都要对数据进行读写操作,那样用全局事件总线来解决这个问题就太麻烦了!!


Vuex就弥补了上面的问题:


什么时候使用Vuex?

  • 多个组件的共享状态(数据)的读写操作。

1.3 Vuex的原理图


Vuex的相关结构:

  • Actions(行动):看似是一个传递效果,其实它可以发送ajax请求,拿到接口相关的数据的。
  • Mutations(转变,修改):负责修改State状态,也就是数据。
  • State(状态 ):状态 , 在这里本质就是数据对象。
  • 上面三个本质都是对象,Actions对象,Mutations对象。State对象。

上面各个函数很重要,像dispatch函数和commit函数都是开发人员自己直接可以调用的;而mutate和render是vue自主调用的函数。


Vuex中的Actions是可以跳过的:


Vuex的store,store是Actions,Mutations,State三个对象的管理者。

  • 像store.dispatch和store.commit都是调用store身上的方法。

2. 搭建Vuex环境

2.1 安装Vuex的注意事项


在2022年2月7日,vue3成为了默认版本。

也就是说我们现在执行npm i vue命令 , 安装的直接就是vue3了。

  • vue3成为了默认版本的同时,vuex也更新到了4版本。4版本的vuex只能适用于vue3。
  • 再安装npm i vuex , 安装的就是vuex4版本。
  • 因此,对于vue2项目,我们不能直接执行npm i vuex,因为,4版本的vuex不适用于vue2。如下图错误:

简而言之就是,vue2要用vuex的3版本。vue3要用vuex的4版本。

  • 所以对于vue2版本,执行npm i vuex@3 严格指定版本号!

2.2 搭建Vuex环境


第一步:执行npm i vuex@3 命令(这里我们使用的vue2版本项目)。


第二步:Vue.use(Vuex) 引入vuex插件。

一旦使用了Vuex的插件,我们就可以在vm实例对象或者vc实例对象上面,添加一个store配置项。

之后,我们都是通过store配置项来操作。


第三步:创建文件src/store/index.js(官方推荐) , 也有src/vuex/store.js。见到store就必须知道!


第四步:修改index.js文件。

// 该文件用于创建Vuex中最为核心的store

//引入Vue,使用插件
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'

//引入Vuex的插件
//在这里使用use,就是为了防止出现一个before的错误。该错误见2.3 Vue的注意事项
Vue.use(Vuex)

// 准备actions 用于响应组件中的动作
const actions  = 


// 准备mutations 用于操作数据(state状态)
const mutations = 


// 准备state 用于存储数据
const state = 


//创建store
const store = new Vuex.Store(
	// actions:actions,
	// mutations:mutations,
	// state:state,
	//简写为一下形式:
	actions,
	mutations,
	state,
)

//对于当前文件我们要让外部文件使用,就必须要暴露相关信息。
//暴露store
export default store
//这样外部import导入的使用拿到的就是store这个对象

第五步:修改main.js导入我们设置的src/store/index.js文件。这样就可以在vm或者vc实例对象上面引用使用store配置项了。

import Vue from "vue"
import App from "./App.vue"
import vueResource from 'vue-resource'

//引入store
// import store from './store/index.js'
// 对于index.js,可以忽略的!因为vue会默认找index开头的。
import store from './store'
Vue.config.productionTip = false;


const vm = new Vue(
	el:'#app',
	render:h=>h(App),
	// store:store,同样对象的简写形式。
	store,
)

//打印查看。
console.log(vm)

store配置项就会多下面的一些内容:

2.3 Vue的注意事项


注意事项:

  • 因为vue加载一个js文件,会先将所有import导入的文件加载完成,再去加载其他的信息。跟顺序没有关系。

因为上图这种问题,Vuex插件在use使用前,会报如下错误:

  • 因为,Vue.use(vuex)使用插件js命令必须在new Vuex.Store(…)的使用对象的前面才可以。不然会报下图错误!

针对上面的错误解决办法就是将Vue.use()放到我们导入的文件,让他们的js代码执行顺序进行调整!!

2.4 Vuex的使用大体流程


Count.vue文件:

<template>
	<div>
		<!-- 
			在模板中,我们不用使用this , 调用的$store就是this当前组件对象默认。
				自然我们就能从state对象中拿到sum值。
		-->
		<h1>当前求和为:$store.state.sum</h1>
		<select v-model="n">
			<option :value="1">1</option>
			<option :value="2">2</option>
			<option :value="3">3</option>
		</select>
		<button @click="increment">+</button>
	</div>
</template>

<script>
	export default
		name:'Count',
		data()
			return
				n:1,//用户选择的数字
			
		,
		methods:
			increment()
				this.$store.dispatch('jia',this.n)
			
		,
	
</script>

<style scoped>
	button
		margin-left: 5px;
	
</style>

src/store/index.js文件:

// 该文件用于创建Vuex中最为核心的store

//引入Vue,使用插件
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'

//引入Vuex的插件
//解决before的问题错误。
Vue.use(Vuex)

// 准备actions 用于响应组件中的动作
const actions  = 
	
	/*
		对应的设置jia函数。
			再次提醒这里的jia()是简写形式。本质就是jia:function()。
		
		这里的两个参数context,value分别是:
			context:一个携带部分功能的store(官方规定参数名是context上下文,实际上无所谓)。
			value:发送过来的值。
	*/
	jia(context,value)
		console.log("actions中的jia被调用了")
		
		// console.log(context)
		// console.log(value)
		
		//将数据发送给mutations
		context.commit('JIA',value)
	


// 准备mutations 用于操作数据(state状态)
const mutations = 
	/*
		同样对应actions的commit。
			也携带了两个参数state和value:
				state:就是Vuex中的state对象,
				value:就是传过来的值。
		在mutations中,对state对象进行操作。	
	*/
	JIA(state,value)
		console.log("mutations中的JIA被调用了")
		
		// console.log(state)
		// console.log(value)
		
		//对state进行操作。
		state.sum += value
	


// 准备state 用于存储数据
const state = 
	sum:0//当前和


//创建store
const store = new Vuex.Store(
	// actions:actions,
	// mutations:mutations,
	// state:state,
	//简写为一下形式:
	actions,
	mutations,
	state,
)

//对于当前文件我们要让外部文件使用,就必须要暴露相关信息。
//暴露store
export default store
//这样外部import导入的使用拿到的就是store这个对象

这样完成了对Vuex中state对象的sum的读写操作,流程也就是这样!

需要注意的是,对于数据或者一些业务逻辑,必须要添加到actions中,不能写到mutations中!!

  • 一定分号层次,actions就是负责处理数据业务逻辑的。
  • mutations就是负责修改state的数据的。

3. Vuex实现 求和案例


Count.vue组件:

<template>
	<div>
		<!-- 
			在模板中,我们不用使用this , 调用的$store就是this当前组件对象默认。
				自然我们就能从state对象中拿到sum值。
		-->
		<h1>当前求和为:$store.state.sum</h1>
		<select v-model="n">
			<option :value="1">1</option>
			<option :value="2">2</option>
			<option :value="3">3</option>
		</select>
		<button @click="increment">+</button>
		<button @click="decrement">-</button>
		<button @click="incrementOdd">当前求和为奇数在加</button>
		<button @click="incrementWait">等一等在加</button>
	</div>
</template>

<script>
	export default
		name:'Count',
		data()
			return
				n:1,//用户选择的数字
			
		,
		methods:
			increment()
				//对于没有业务逻辑的就不需要走actions了,我们直接commit就可以了。
				this.$store.commit('JIA',this.n)
			,
			decrement()
				this.$store.commit('JIAN',this.n)
			,
			incrementOdd()
				this.$store.dispatch('jiaOdd',this.n)
			,
			incrementWait()
				this.$store.dispatch('jiaWait',this.n)
			,
		,
	
</script>

<style scoped>
	button
		margin-left: 5px;
	
</style>

src/store/index.js文件:

// 该文件用于创建Vuex中最为核心的store

//引入Vue,使用插件
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'

//引入Vuex的插件
//解决before的问题错误。
Vue.use(Vuex)

// 准备actions 用于响应组件中的动作
const actions  = 
	
	/*
		对应的设置jia函数。
			再次提醒这里的jia()是简写形式。本质就是jia:function()。
		
		这里的两个参数context,value分别是:
			context:一个携带部分功能的store(官方规定参数名是context上下文,实际上无所谓)。
			value:发送过来的值。
	*/
	jiaOdd(context,value)
		console.log("actions中的jiaOdd被调用了")
		if(context.state.sum % 2)
			context.commit('JIAODD',value)
		
	,
	jiaWait(context,value)
		console.log("actions中的jiaWait被调用了")
		setTimeout(()=>
			context.commit('JIANWAIT',value)
		,500)
	


// 准备mutations 用于操作数据(state状态)
const mutations = 
	/*
		同样对应actions的commit。
			也携带了两个参数state和value:
				state:就是Vuex中的state对象,
				value:就是传过来的值。
		在mutations中,对state对象进行操作。	
	*/
	JIA(state,value)
		console.log("mutations中的JIA被调用了")
		
		// console.log(state)
		// console.log(value)
		
		//对state进行操作。
		state.sum += value
	,
	
	JIAN(state,value)
		console.log("mutations中的JIAN被调用了")
		state.sum -= value
	,
	JIAODD(state,value)
		console.log("mutations中的JIAODD被调用了")
		state.sum += value
	,
	JIANWAIT(state,value)
		console.log("mutations中的JIANWAIT被调用了")
		state.sum += value
	


// 准备state 用于存储数据
const state = 
	sum:0//当前和


//创建store
const store = new Vuex.Store(
	// actions:actions,
	// mutations:mutations,
	// state:state,
	//简写为一下形式:
	actions,
	mutations,
	state,
)

//对于当前文件我们要让外部文件使用,就必须要暴露相关信息。
//暴露store
export default store
//这样外部import导入的使用拿到的就是store这个对象

4. Vuex的开发者工具


Vue和Vuex都是由vue团队打造出来的。

这个团队设计Vue的开发者工具中,也包含了Vuex的开发者工具。



图下,也符合了为什么官方认定的参数叫做context上下文的意思了。

5. Vuex中的 getters配置项

5.1 getters介绍和使用


getters的作用:当state中的数据需要经过加工后再使用时,可以使用getters加工。

src/store/index.js文件:

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

const actions  = 
	//加法不需要经过逻辑运算获取啥的。


const mutations = 
	JIA(state,value)
		console.log("mutations中的JIA被调用了")
		state.sum += value
	


const state = 
	sum:0//当前和


//准备getters,用于将state中的数据进行加工
const getters = 
	bigSum(state)
		return state.sum*10
	


const store = new Vuex.Store(
	actions,
	mutations,
	state,
	//不要忘记在store中配置
	getters
)

export default store

Count.vue文件:

<template>
	<div>
		<h1>当前求和为:$store.state.sum</h1>
		<h3>当前求和放大10倍后:$store.getters.bigSum</h3>
		<select v-model="n">
			<option :value="1">1</option>
			<option :value="2">2</option>
			<option :value="3">3</option>
		</select>
		<button @click="increment">+</button>
	</div>
</template>

<script>
	export default
		name:'Count',
		data()
			return
				n:1,//用户选择的数字
			
		,
		methods:
			increment()
				this.$store.commit('JIA',this.n)
			,
		,
		mounted()
			console.log(this.$store)
		
	
</script>

<style scoped>
	button
		margin-left: 5px;
	
</style>

5.2 总结


6. Vuex中的 四个map方法

6.1 一些注意事项


键值对的一些注意事项:

mounted()
/*
	注意事项:
		对象中键值对,key键的本身就是字符串,
		就像下面的sum原型就是'sum',只不过精简了。
		但是value值,必须指定好!没有精简!!
		
	mapState只能操作state中的数据。像上面的bigSum是getters中的内容。
*/
const x = mapState(
	he:'sum',
	xuexiao:'school',
	xueke:'subject'
)
console.log(x)


es6语法: …的作用。

6.2 Vuex中的 mapState


mapState就是映射状态,意思就是帮忙生成操作state的代码。一般应用到计算属性中。

效果就像下面的计算属性注释中的内容一样:

<template>
	<div>
		<h1>当前求和为:he</h1>
		<h3>当前求和放大10倍后:bigSum</h3>
		<h3>我在xuexiao ,学习xueke</h3>
		<select v-model="n">
			<option :value="1">1</option>
			<option :value="2">2</option>
			<option :value="3">3</option>
		</select>
		<button @clickVue 学习总结笔记

Vue3 学习总结笔记 (十四)

Vue3 学习总结笔记 (十四)

Vue.js学习笔记总结1

Vue 学习总结笔记

Vue3 学习总结笔记 (十三)