什么是状态管理?
简单地讲:可以把多个组件都需要的变量全部存储到一个对象里面,然后这个对象放在顶层的 vue 实例中,让其他组件可以使用。这样多个组件就可以共享这个对象中的所有属性。
有些同学想着,这么简单我们自己在vue顶层定义一个对象不就可以实现共享了?我们发现虽然数据可以获取到,但是如果在某个组件内,数据改变了,那我们如何修改数据,让此数据在其他组件内保持最新呢?
我们的vuex就是为了提供一个在多个组件间共享状态的插件,而且能够实现实时响应。
阅读辛苦了,领个红包噻!
二、Vuex 使用
vuex 是管理组件之间通信的一个插件,所以使用之前必须安装。
2.1、安装
1》使用 script 方式引入
2》使用包管理
npm install vuex --save //yarn add vuex
注意:vuex 必须依赖 vue 使用
2.2、搭建 store 实例
创建一个 store 文件夹,新建 index.js
import Vue from “vue”;
import Vuex from “vuex”;
Vue.use(Vuex);//使用vuex
export default new Vuex.Store({
state:{},
mutations:{},
getters:{},
actions:{},
modules:{}
})
在 main.js 处,挂载 store
import store from ‘./store’
new Vue({
router,
render: h=>h(App)
})
//相当于
// Vue.prototype.$store = store
2.3、使用状态
// store 中定义状态
state:{
statue: ‘在线’
}
//在组件内使用
//在 js 中使用
mounted(){
console.log( this.$store.state.status )
}
三、Vuex 的五大核心
3.1、state
state 存放 vuex 的基本数据,用来存储变量的。
单一状态树
Vuex 使用单一状态树,即用一个对象就包含了全部的状态数据。state 作为构造器选项,定义了所有我们需要的基本状态参数。
在组件中引用 state 数据方式:
1》通过 vue 的 computed 获取 vuex 的 state
export default new Vuex.Store({
state:{
online:true
}
})
computed:{
status(){
return this.$store.state.online
}
}
store 中的数据发生改变时,都会重新求取计算属性,并更新相关 DOM。
2》如果需要使用多个参数时,都使用 computed 计算属性,就会使代码变的有些冗余和复杂,此时我们就可以借助 mapState 辅助函数。
//state 中数据比较多,引用到一个组件内
export default new Vuex.Store({
state:{
online:true,
per:[
{name:‘qq’,age:18}
],
role:‘管理员’
}
})
//组件内
import { mapState } from ‘vuex’
export default {
name: ‘App’,
computed: mapState({
online: state => state.online,
per: ‘per’, // 'per’就相当于 state.per
role: ‘role’ // 'role’就相当于 state.role
})
}
vuex 使用单一状态树来管理应用层级的全部状态,单一状态树能够让我们最直接的方式找到某个状态的片段,而且之后的维护和调试过程,也可以非常方便管理和维护。
3.2、getters
从 store 中获取一些 state 变异后的状态。
使用的时候一般有两种方式:
1》返回的结果只依赖于 state 中的数据
export default new Vuex.Store({
state:{
count:2,
},
getters:{
//返回 count 的 2 倍数据
countDouble(state){
return state.count*2
}
}
})
//组件中引用
//运行结果
获取countDouble:4
此处,$store.getters.countDouble 的使用与上边的 $store.state.count 是一样的。
2》getters 中返回的变异结果,依赖于某个 getters 中属性返回结果
export default new Vuex.Store({
state:{
count:2,
},
getters:{
//返回 count 的 2 倍数据
countDouble( state ){
return state.count * 2
}
//返回 countDouble 的 2 倍数据
countDoubleT( state , getters ){
return getters.countDouble * 2
}
}
})
//组件中引用
//运行结果
获取countDouble:8
3.3、mutations
vuex 的store 状态的更新唯一方式:提交 Mutation。
Mutations 主要包括两部分:
-
字符串的事件类型
-
一个回调函数,该回调函数的第一个参数就是 state。
1》、mutation 中的方法通过 commit 调用,不传参数使用:
export default new Vuex.Store({
state:{
count:2,
},
mutations:{
incrs(state){
// count 加 1
state.count++
}
}
})
//组件调用
<button @click=" $store.commit(‘incrs’) " >+
{{$store.state.count}}
按钮每点一次,count 就会自加一次。
2》mutations 传递参数
我们点击加按钮时,指定每次点击增加的数值,如下:
export default new Vuex.Store({
state:{
count:2,
},
mutations:{
addNum( state,n ){
// count 加 1
state.count +=n
}
}
})
//组件调用
<button @click=" $store.addNum( ‘incrs’ , 5 ) " >+
{{$store.state.count}}
//运行结果
每点一次按钮,count 增加 5
上个实例传递的是一个参数,如果我们需要传递多个参数时,该如何实现呢?
3》mutations 传递多个参数
export default new Vuex.Store({
state:{
count:2,
},
mutations:{
addNum(state,payload){
// payload 是传递过来的参数对象
state.count += payload.count
}
}
})
//组件调用
<button @click=“addTen” >加10
{{$store.state.count}}
export default{
methods:{
addTen(){
this.$store.commit({
type:‘addNum’,
count:10,
…//可以传任意多个参数
})
}
}
}
//运行结果
每点一次按钮,count 增加 10
上述方法是 mutations 特殊的提交封装。包含了 type 属性的对象,将整个 commit 的对象作为 payload 使用。
3.4、actions
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
算法
-
冒泡排序
-
选择排序
-
快速排序
-
二叉树查找: 最大值、最小值、固定值
-
二叉树遍历
-
二叉树的最大深度
-
给予链表中的任一节点,把它删除掉
-
链表倒叙
-
如何判断一个单链表有环
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-HNTVLsJL-1712736587921)]
算法
-
冒泡排序
-
选择排序
-
快速排序
-
二叉树查找: 最大值、最小值、固定值
-
二叉树遍历
-
二叉树的最大深度
-
给予链表中的任一节点,把它删除掉
-
链表倒叙
-
如何判断一个单链表有环
[外链图片转存中…(img-Qbuy9sO8-1712736587921)]
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-kuSH7XFG-1712736587922)]