直击优秀开源框架灵魂,Vuex面试题汇总,熬夜整理最新大厂前端高频面试题

getters: {

total: state => {

return state.price * state.number

},

discountTotal: (state, getters) => {

return state.discount * getters.total

}

},

});

然后在组件中可以用计算属性computed通过this.$store.getters.total这样来访问这些派生转态。

computed: {

total() {

return this.$store.getters.total

},

discountTotal() {

return this.$store.getters.discountTotal

}

}

怎么通过getter来实现在组件内可以通过特定条件来获取state的状态?

参考答案

通过让getter返回一个函数,来实现给getter传参。然后通过参数来进行判断从而获取state中满足要求的状态。

const store = new Vuex.Store({

state: {

todos: [

{ id: 1, text: ‘…’, done: true },

{ id: 2, text: ‘…’, done: false }

]

},

getters: {

getTodoById: (state) => (id) =>{

return state.todos.find(todo => todo.id === id)

}

},

});

然后在组件中可以用计算属性computed通过this.$store.getters.getTodoById(2)这样来访问这些派生转态。

computed: {

getTodoById() {

return this.$store.getters.getTodoById

},

}

mounted(){

console.log(this.getTodoById(2).done)//false

}

怎么在组件中批量使用Vuex的getter属性

参考答案

使用mapGetters辅助函数, 利用对象展开运算符将getter混入computed 对象中

import {mapGetters} from ‘vuex’

export default{

computed:{

…mapGetters([‘total’,‘discountTotal’])

}

}

怎么在组件中批量给Vuex的getter属性取别名并使用

参考答案

使用mapGetters辅助函数, 利用对象展开运算符将getter混入computed 对象中

import {mapGetters} from ‘vuex’

export default{

computed:{

…mapGetters({

myTotal:‘total’,

myDiscountTotal:‘discountTotal’,

})

}

}

在Vuex的state中有个状态number表示货物数量,在组件怎么改变它。

参考答案

首先要在mutations中注册一个mutation

const store = new Vuex.Store({

state: {

number: 10,

},

mutations: {

SET_NUMBER(state,data){

state.number=data;

}

},

});

在组件中使用this.$store.commit提交mutation,改变number

this.$store.commit(‘SET_NUMBER’,10)

在Vuex中使用mutation要注意什么。

参考答案

mutation 必须是同步函数

在组件中多次提交同一个mutation,怎么写使用更方便。

参考答案

使用mapMutations辅助函数,在组件中这么使用

import { mapMutations } from ‘vuex’

methods:{

…mapMutations({

setNumber:‘SET_NUMBER’,

})

}

然后调用this.setNumber(10)相当调用this.$store.commit('SET_NUMBER',10)

Vuex中action和mutation有什么区别?

参考答案

  • action 提交的是 mutation,而不是直接变更状态。mutation可以直接变更状态。

  • action 可以包含任意异步操作。mutation只能是同步操作。

  • 提交方式不同,action 是用this.$store.dispatch('ACTION_NAME',data)来提交。mutation是用this.$store.commit('SET_NUMBER',10)来提交。

  • 接收参数不同,mutation第一个参数是state,而action第一个参数是context,其包含了

{

state, // 等同于 store.state,若在模块中则为局部状态

rootState, // 等同于 store.state,只存在于模块中

commit, // 等同于 store.commit

dispatch, // 等同于 store.dispatch

getters, // 等同于 store.getters

rootGetters // 等同于 store.getters,只存在于模块中

}

Vuex中action和mutation有什么相同点?

参考答案

第二参数都可以接收外部提交时传来的参数。 this.$store.dispatch('ACTION_NAME',data)this.$store.commit('SET_NUMBER',10)

在组件中多次提交同一个action,怎么写使用更方便。

参考答案

使用mapActions辅助函数,在组件中这么使用

methods:{

…mapActions({

setNumber:‘SET_NUMBER’,

})

}

然后调用this.setNumber(10)相当调用this.$store.dispatch('SET_NUMBER',10)

Vuex中action通常是异步的,那么如何知道action什么时候结束呢?

参考答案

在action函数中返回Promise,然后再提交时候用then处理

actions:{

SET_NUMBER_A({commit},data){

return new Promise((resolve,reject) =>{

setTimeout(() =>{

commit(‘SET_NUMBER’,10);

resolve();

},2000)

})

}

}

this.$store.dispatch(‘SET_NUMBER_A’).then(() => {

// …

})

Vuex中有两个action,分别是actionA和actionB,其内都是异步操作,在actionB要提交actionA,需在actionA处理结束再处理其它操作,怎么实现?

参考答案

利用ES6的asyncawait来实现。

actions:{

async actionA({commit}){

//…

},

async actionB({dispatch}){

await dispatch (‘actionA’)//等待actionA完成

// …

}

}

有用过Vuex模块吗,为什么要使用,怎么使用。

参考答案

有,因为使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。所以将 store 分割成模块(module)。每个模块拥有自己的 state、mutations、actions、getters,甚至是嵌套子模块,从上至下进行同样方式的分割。

在module文件新建moduleA.js和moduleB.js文件。在文件中写入

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

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

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

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

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

如果你觉得这些内容对你有帮助,可以扫码获取(备注前端)
img

最后

在面试前我花了三个月时间刷了很多大厂面试题,最近做了一个整理并分类,主要内容包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。

包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。

  • HTML5新特性,语义化

  • 浏览器的标准模式和怪异模式

  • xhtml和html的区别

  • 使用data-的好处

  • meta标签

  • canvas

  • HTML废弃的标签

  • IE6 bug,和一些定位写法

  • css js放置位置和原因

  • 什么是渐进式渲染

  • html模板语言

  • meta viewport原理

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

什么是渐进式渲染

  • html模板语言

  • meta viewport原理

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值