vuex面试题

在这里插入图片描述
【1.什么是Vuex?】

	Vuex 是一个专为 Vue.js 应用程序开发的状态管理插件。它采用集中式存储管理应用的所有组件的状态

【2.Vuex解决了什么问题?】

	多个组件依赖于同一状态时,来自不同组件的行为需要变更同一状态。

【3.vuex使用与什么场景?】

	单页应用中,组件之间的状态。音乐播放、登录状态、加入购物车

【4.vuex有哪几种属性&状态?】

	state、getters、mutations、actions、modules 。

【5.vuex的流程】

	页面通过mapAction异步提交事件到action。action通过commit把对应参数同步提交到mutation。mutation会修改state中对于的值。
	最后通过getter把对应值跑出去,在页面的计算属性中,通过mapGetter来动态获取state中的值。

【6.Vuex中状态储存在哪里,怎么改变它?】

	存储在state中,改变Vuex中的状态的唯一途径就是显式地提交 (commit) mutation。

【7.Vuex中状态是对象时,使用时要注意什么?】

	对象是引用类型,复制后改变属性还是会影响原始数据,这样会改变state里面的状态,是不允许,所以先用深度克隆复制对象,再修改。

【8.vuex的State特性是?】

	stae就是存放数据的地方,类似一个仓库  。
    特性就是当mutation修改了state的数据的时候,他会动态的去修改所有的调用这个变量的所有组件里面的值( 若是store中的数据发生改变,依赖这个数据的组件也会发生更新 )

【9.vuex的Getter特性是?】

	getter用来获取数据,mapgetter经常在计算属性中被使用

【10.vuex的Mutation特性是?】

	Action 类似于 mutation,不同在于:

	1、Action 提交的是 mutation,而不是直接变更状态。

	2、Action 可以包含任意异步操作

【11.怎么在组件中批量使用Vuex的state状态?】

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

	import {mapState} from 'vuex' 
	export default { 
		computed:{ 
					...mapState(['price','number']) 
				 } 
	}

【12.Vue.js中ajax请求代码应该写在组件的methods中还是vuex的actions中?】

	如果请求来的数据是不是要被其他组件公用,仅仅在请求的组件内使用,就不需要放入vuex 的state里。
	如果被其他地方复用,这个很大几率上是需要的,如果需要,请将请求放入action里,方便复用。

【13.vuex的优缺点】

	优点:
	1.JS原生的数据对象写法, 比起 localStorage 不需要做转换, 使用方便
	2.属于 vue 生态一环, 能够触发响应式的渲染页面更新 (localStorage 就不会)
	3.限定了一种可预测的方式改变数据, 避免大项目中, 数据不小心的污染
	缺点:
	1.刷新浏览器,vuex中的state会重新变为初始状态
	2.解决方案-插件vuex-persistedstate

项目中遇到vuex此缺点的处理
场景 - 用户登录,提交订单之后,跳转到付款页,在created发送axios请求,获取付款二维码字符串等信息。但是刷新之后,请求响应是401 Unauthorized,看headers是Bearer undefined。

created: function () {
    this.$axios({
      url: "/airorders/" + this.$route.query.id,
      headers: {
        Authorization: "Bearer " + this.$store.state.user.userInfo.token,
      },
    }).then((res) => {
      console.log(res.data);
    });
  }

在这里插入图片描述
原因分析 - 不可以直接在created获取数据,因为直接跳转过来没问题,但是一刷新,vuex的token就没有了,created的时候localstorage的token还没回来。

所以:
如果是在本页面刷新, 就会没有 token, 只能在 watch里面 进行监听
如果正常跳转 token 本身存在, 监听不到改变, 可以通过 watch 的 immediate 属性 实现
在这里插入图片描述

watch: {
    "$store.state.user.userInfo.token": {
      handler: function () {
        if (this.$store.state.user.userInfo.token) {
          this.$axios({
            url: "/airorders/" + this.$route.query.id,
            headers: {
              Authorization: "Bearer " + this.$store.state.user.userInfo.token,
            },
          }).then((res) => {
            console.log(res.data);
      },
      immediate: true,
    },
  },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老电影故事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值