前文
其实面试题大家不需要背,按自己的意思说出来就行,千万不要把面试题一字一句的背下来,而是在理解的基础上说出来,因此我们可以在面试的时候对一些问题画龙点睛(我面试经验也少,个人粗见而已),下文中加粗+斜体是加分项(可有可无),粗体是重要必须项。
Vuex
vuex介绍(是什么、作用、怎么用、原理)
是什么:状态管理模式,其实就是一个数据仓库,用来存储和管理数据状态的
什么场景使用:一般来说用于多个视图和实例使用同一种状态,多个视图改变同一个状态,
概念:state、mutation、action、getter,
-
state:单状态树,也就是说所有的vue实例使用的都是同一个state对象的数据(支持模块化,最后需要合并而已),是用来管理和储存数据状态的,一般存放的是全局状态数据,比如说用户的登录信息、用户的权限信息,购物车数据,主题信息等需要多个视图和vue实例使用的信息(问:什么信息可以存储到vuex中).
- 使用:在store中state定义,...mapState()导出(当做Vue的computed属性来使用)
-
getter:其实就是store中的计算属性,依赖于state,...mapGetters()
-
Mutations: 用来修改state的唯一方法,functions(state,payload),store.commit()进行调用,必须是同步的,因为假如异步的话devtools无法追踪到 回调函数 修改state的过程,可能给我们的debug带来bug(问:为什么mutations中的函数都是同步的)
-
action:支持异步操作,可以调用mutations来变更state、可以异步、$store.dispatch来派发acitons,因为action返回一个promise,所以可以使用dispatch.then来顺序处理多个dispatch请求
组合式Api中怎么使用(Vue3使用vuex):
const store=useStore()
// 因为没有了全局对象this所以需要注册一个store实例
store.state.xxx
pinia介绍(是什么、作用、怎么用、原理)
也是状态管理器
核心概念和vuex几乎一样,只是在语法上有些许不同
vue和pinia的区别
冷知识:vuex的作者是🦑,pinia的作者是Eduardo Morote(Vue核心成员)
在我看来pinia和vuex在核心概念和业务使用场景上几乎完全相同,那么最大的不同主要是pinia支持多种多样的写法,不同于vuex中单一且繁琐的写法(其实这里可以例举react-redux?面试中可以加分?前提是你对react比较熟悉,要不然千万不要多嘴!!!),既支持vuex中的写法也支持compositionAPI的写法,
可以单独创建一个store实例然后在vue实例中调用,扁平的结构,不用像vuex中进行模块化整合了。
支持TypeScript,便携开发,pinia文档中也重点提到了ts的自动补全
可扩展性?高级pinia玩法(pinia-plugin-persist)可以用来数据持久化储存,pinia.use(),将数据自动保存在sessionStorge中 pinia-plugin-persist在我的项目中就使用到了,我在我的vue项目模版中安装了pinia-plugin-persist,在特定的store中开启后,pinia会自动将这个store实例中的信息存入sessionStorage中去
Pinia Plugin Persist:可以看一看如何使用在项目中
什么信息可以存储到VueX中
一般存放的是全局状态数据,比如说用户的登录信息、用户的权限信息,购物车数据,主题信息等需要多个视图和vue实例使用的信息
VueX中的用户信息是什么时候放进去的?什么时候会使用?
实例dispatch派发acitons然后从后端获取到数据后调用mutations对state中的用户信息进行更新。一般回用于用户路由权限,和判断一些功能的使用权限,展示用户信息
假设菜品存储在Vuex,单价发生了改变后什么时候同步到vuex中,后台不刷新,前台永远是老的价格?(说的有点模糊)
单价改变发生在前端的话,直接同步到vuex进行修改(使用mutation修改vuex中的state),保证前端是最新的(前提是前端依赖的数据是从vuex获取到的)
如果发生在后端,就直接修改vuex就行。
vuex储存的实例化是存放在哪的
储存在vue根根实例,因为这样才能保证从全局能调用到,保证多个视图共享同一个数据状态