Vue全家桶之VueX(六),2024年最新Web前端开发基础课程

import Vue from ‘vue’

import App from ‘./App’

// 1.导入store对象

import store from ‘./store’

new Vue({

el: ‘#app’,

// 2.挂载 store

store,

render: h => h(App)

})

  • 这样,在其他Vue组件中,我们就可以通过 this.$store的方式,获取到这个store对象了

<button @click=“increment”>+1

<button @click=“decrement”>-1<

使用步骤小结:

  1. 提取出一个公共的 store 对象,用于保存在多个组件中共享的状态

  2. 将 store 对象放置在 new Vue 对象中,这样可以保证在所有的组件中都可以使用到

  3. 在其他组件中使用 store 对象中保存的状态即可

  • 通过 this.$store.state 属性的方式来访问状态

  • 通过 this.$store.commit('mutation中方法') 来修改状态

  1. 我们通过提交 mutation 的方式,而非直接改变 store.state.count

  2. 这是因为 Vuex 可以更明确的追踪状态的变化,所以不要直接改变 store.state.count 的值

1.4、安装vue-devtools


  1. 在 Chrome 网上应用商店 搜索 devtools

  2. 选择 vue.js devtools ,添加即可

1.5、Vuex核心概念


Vuex有几个比较核心的概念:

  • State

  • Getters

  • Mutation

  • Action

  • Module

1.5.1、State 单-状态树

Vuex提出使用单一状态树, 什么是单一状态树呢?

  • 英文名称是Single Source of Truth,也可以翻译成单一数据源。

  • 我用一个生活中的例子做一个简单的类比,我们知道,在国内我们有很多的信息需要被记录,比如上学时的个人档案,工作后的社保记录,公积金记录,结婚后的婚姻信息,以及其他相关的户口、医疗、文凭、房产记录等等(还有很多信息)。

  • 这些信息被分散在很多地方进行管理,有一天你需要办某个业务时(比如入户某个城市),你会发现你需要到各个对应的工作地点去打印、盖章各种资料信息,最后到一个地方提交证明你的信息无误。这种保存信息的方案,不仅仅低效,而且不方便管理,以及日后的维护也是一个庞大的工作(需要大量的各个部门的人力来维护,当然国家目前已经在完善我们的这个系统了)。

  • 这个和我们在应用开发中比较类似:如果你的状态信息是保存到多个Store对象中的,那么之后的管理和维护等等都会变得特别困难,所以Vuex也使用了单一状态树来管理应用层级的全部状态。单一状态树能够让我们最直接的方式找到某个状态的片段,而且在之后的维护和调试过程中,也可以非常方便的管理和维护。

1.5.2、Getters基本使用

有时候,我们需要从 store 中获取一些 state 变异后的状态,比如下面的 Store

import Vuex from ‘vuex’

import Vue from ‘vue’

// 1.安装插件

Vue.use(Vuex)

// 2.创建对象

const store = new Vuex.Store({

state: {

students: [

{id: 100,name: ‘why’,age: 18},

{id: 111,name: ‘kobe’,age: 21},

{id: 112,name: ‘lucy’,age: 25},

{id: 113,name: ‘lilei’,age: 2},

]

},

mutations: {

},

actions: {

},

getters: {

// 获取年龄大于20的学生对象

more20stu(state){

return state.students.filter(s => s.age >20)

}

},

modules: {

}

})

// 导出store对象

export default store

这样我们在其他 .vue 组件中也可以拿到年龄大于20的学生对象

{{$store.getters.more20stu}}

①、Getters作为参数和传递参数

如果我们已经有了一个获取所有年龄大于20岁学生的列表 getters,那么代码可以这样来写

import Vuex from ‘vuex’

import Vue from ‘vue’

// 1.安装插件

Vue.use(Vuex)

// 2.创建对象

const store = new Vuex.Store({

state: {

students: [

{id: 100,name: ‘why’,age: 18},

{id: 111,name: ‘kobe’,age: 21},

{id: 112,name: ‘lucy’,age: 25},

{id: 113,name: ‘lilei’,age: 2},

]

},

mutations: {

},

actions: {

},

getters: {

// 获取年龄大于20的学生对象

more20stu(state){

return state.students.filter(s => s.age >20)

},

// 获取年龄大于20的学生个数

more20stuLength(state,getters) {

return getters.more20stu.length

}

},

modules: {

}

})

// 导出store对象

export default store

getters 默认是不能传递参数的, 如果希望传递参数, 那么只能让getters本身返回另一个函数.

import Vuex from ‘vuex’

import Vue from ‘vue’

// 1.安装插件

Vue.use(Vuex)

// 2.创建对象

const store = new Vuex.Store({

state: {

students: [

{id: 100,name: ‘why’,age: 18},

{id: 111,name: ‘kobe’,age: 21},

{id: 112,name: ‘lucy’,age: 25},

{id: 113,name: ‘lilei’,age: 2},

]

},

mutations: {

},

actions: {

},

getters: {

// 获取年龄大于20的学生对象

more20stu(state){

return state.students.filter(s => s.age >20)

},

// 获取年龄大于20的学生个数

more20stuLength(state,getters) {

return getters.more20stu.length

},

// 让用户自己决定获取年龄大于多少

moreAgeStu(state) {

return function(age){

return state.students.filter(s => s.age > age)

}

}

},

modules: {

}

})

// 导出store对象

export default store

这样我们在其他 .vue 组件中就可以传入年龄数值筛选了

{{$store.getters.more20stu}}

{{$store.getters.more20stuLength}}

{{$store.getters.moreAgeStu(8)}}

1.5.4、Mutation状态更新

  • Vuex的store状态的更新唯一方式:提交Mutation

  • Mutation主要包括两部分:

  • 字符串的事件类型(type)

  • 一个回调函数(handler) 该回调函数的第一个参数就是 state

  1. mutation 的定义方式

import Vuex from ‘vuex’

import Vue from ‘vue’

// 1.安装插件

Vue.use(Vuex)

// 2.创建对象

const store = new Vuex.Store({

state: {

count: 0

},

mutations: {

increment(state){

state.count++

},

decrement(state){

state.count–

}

},

actions: {

},

getters: {

},

modules: {

}

})

// 导出store对象

export default store

  1. 通过 mutation 更新

<button @click=“increment”>+1

<button @click=“decrement”>-1<

①Mutation传递参数

在通过mutation更新数据的时候, 有可能我们希望携带一些额外的参数,参数被称为 mutation 的载荷(Payload)

import Vuex from ‘vuex’

import Vue from ‘vue’

// 1.安装插件

Vue.use(Vuex)

// 2.创建对象

const store = new Vuex.Store({

state: {

count: 0

},

mutations: {

increment(state){

state.count++

},

decrement(state){

state.count–

},

incrementCount(state,count){

state.counter += count

}

},

actions: {

},

getters: {

},

modules: {

}

})

// 导出store对象

export default store

我们在其他 .vue 组件中来修改状态

<button @click=“increment”>+1

<button @click=“decrement”>-1<

<button @click=“addCount(5)”>+5

<button @click=“addCount(10)”>+5

但是如果参数不是一个呢?

比如我们有很多参数需要传递,这个时候,我们通常会以对象的形式传递,也就是 payload 是一个对象。

这个时候可以再从对象中取出相关的信息。

import Vuex from ‘vuex’

import Vue from ‘vue’

// 1.安装插件

Vue.use(Vuex)

// 2.创建对象

const store = new Vuex.Store({

state: {

students: [

{id: 100,name: ‘why’,age: 18},

{id: 111,name: ‘kobe’,age: 21},

{id: 112,name: ‘lucy’,age: 25},

{id: 113,name: ‘lilei’,age: 2},

]

},

mutations: {

},

actions: {

},

getters: {

},

modules: {

addStudent(state,stu){

state.students.push(stu)

}

}

})

// 导出store对象

export default store

我们在其他 .vue 组件中来修改状态

<button @click=“increment”>+1

<button @click=“decrement”>-1<

<button @click=“addCount(5)”>+5

<button @click=“addCount(10)”>+5

<button @click=“addStudent”>添加学生

②Mutation提交风格

上面的通过 commit 进行提交是一种普通的方式

Vue 还提供了另外一种风格,它是一个包含 type 属性的对象

import Vuex from ‘vuex’

import Vue from ‘vue’

// 1.安装插件

Vue.use(Vuex)

// 2.创建对象

const store = new Vuex.Store({

state: {

students: [

{id: 100,name: ‘why’,age: 18},

{id: 111,name: ‘kobe’,age: 21},

{id: 112,name: ‘lucy’,age: 25},

{id: 113,name: ‘lilei’,age: 2},

]

},

mutations: {

},

actions: {

},

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

总结
  • 对于框架原理只能说个大概,真的深入某一部分具体的代码和实现方式就只能写出一个框架,许多细节注意不到。

  • 算法方面还是很薄弱,好在面试官都很和蔼可亲,擅长发现人的美哈哈哈…(最好多刷一刷,不然影响你的工资和成功率???)

  • 在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。

  • 要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!

第一次跳槽十分忐忑不安,和没毕业的时候开始找工作是一样的感受,真的要相信自己,有条不紊的进行。如果有我能帮忙的地方欢迎随时找我,比如简历修改、内推、最起码,可以把烦心事说一说,人嘛都会有苦恼的~

祝大家都有美好的未来,拿下满意的 offer。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

0-1712709302419)]
[外链图片转存中…(img-qwhAwaD2-1712709302420)]
[外链图片转存中…(img-dtQTn3Pr-1712709302420)]
[外链图片转存中…(img-WZBspYcz-1712709302420)]
[外链图片转存中…(img-g8yM2nfI-1712709302420)]
[外链图片转存中…(img-UBPAzo2I-1712709302421)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-Bn2jlhcl-1712709302421)]

总结
  • 对于框架原理只能说个大概,真的深入某一部分具体的代码和实现方式就只能写出一个框架,许多细节注意不到。

  • 算法方面还是很薄弱,好在面试官都很和蔼可亲,擅长发现人的美哈哈哈…(最好多刷一刷,不然影响你的工资和成功率???)

  • 在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。

  • 要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!

第一次跳槽十分忐忑不安,和没毕业的时候开始找工作是一样的感受,真的要相信自己,有条不紊的进行。如果有我能帮忙的地方欢迎随时找我,比如简历修改、内推、最起码,可以把烦心事说一说,人嘛都会有苦恼的~

祝大家都有美好的未来,拿下满意的 offer。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-VhYSiAL8-1712709302421)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值