vue面试题(3)

1.$nextTick是什么?

vue实现响应式并不是数据发生变化后dom立即变化,而是按照一定的策略来进行dom更新

nextTick 是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用nextTick,

则可以在回调中获取更新后的 DOM。

2.v-for key的作用

为了给Vue一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,

你需要为每项提供一个唯一 key 属性。key属性的类型只能为 string或者number类型。

3.vue如何获取dom

<div ref="test"></div>

const dom = this.$refs.test

4.assets和static的区别

这两个都是用来存放项目中所使用的静态资源文件。

两者的区别:

assets中的文件在运行npm run build的时候会打包,简单来说就是会被压缩体积,

代码格式化之类的。打包之后也会放到static中。

static中的文件则不会被打包。

建议:将图片等未处理的文件放在assets中,打包减少体积。

而对于第三方引入的一些资源文件如iconfont.css等可以放在static中,因为这些文件已经经过处理了。

5.vue初始化页面闪动问题

使用vue开发时,在vue初始化之前,由于div是不归vue管的,所以我们写的代码在

还没有解析的情况下会容易出现花屏现象,看到类似于{{message}}的字样

首先:在css里加上以下代码

[v-cloak] {
    display: none;
}

如果没有彻底解决问题,则在根元素加上style="display: none;" :style="{display: 'block'}"

但有时添加完毕后仍有部分变量会显示,这是怎么回事呢?通过控制台查看,

原来是 v-cloak 的display属性被优先级别高的样式覆盖所导致,我的处理方案是添加 !important ,

[v-cloak] {
  display:none !important;
}

6.ajax请求代码应该写在组件的methods中还是vuex的actions中

如果请求来的数据是不是要被其他组件公用,仅仅在请求的组件内使用,就不需要放入vuex 的state里。

如果被其他地方复用,这个很大几率上是需要的,如果需要,请将请求放入action里,方便复用。

7.从vuex中获取的数据能直接更改吗?

从vuex中取的数据,不能直接更改,需要浅拷贝对象之后更改,否则报错;

8.vuex中的数据在页面刷新后数据消失

用sessionstorage 或者 localstorage 存储数据

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

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

import {mapGetters} from 'vuex'
export default{
    computed:{
        ...mapGetters(['total','discountTotal'])
    }
}

9.mutation和action有什么区别?

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

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

3.提交方式不同

action 是用this.store.dispatch('ACTION_NAME',data)来提交。

mutation是用this.$store.commit('SET_NUMBER',10)来提交

4.接收参数不同,mutation第一个参数是state,而action第一个参数是context.

10.在v-model上怎么用Vuex中state的值?

需要通过computed计算属性来转换。

<input v-model="message">
// ...
computed: {
    message: {
        get () {
            return this.$store.state.message
        },
        set (value) {
            this.$store.commit('updateMessage', value)
        }
    }
}


posted @ 2020-09-16 15:32  爱喝可乐的靓仔  阅读(203)  评论(0编辑  收藏  举报