• 微信号
  • 微信号
您当前的位置:首页 > 学海无涯 > 茑语花香>关于vue2几个点的理解

关于vue2几个点的理解

孤峰 孤峰家 2024-01-09 10人阅读

1.请求在哪个钩子里写?

所有的钩子函数都是同步任务,同步任务下在mounted阶段才能获取到dom,

把请求直接放在任意的钩子里面都可以拿到数据,并且在请求里面也能获取dom,这是因为请求是异步的,当请求执行的时候,钩子函数已经执行完了,所以必定执行过了mounted了,肯定也就能获取到dom了。

得出结论,任意的钩子函数里面只要有异步代码,就可以在异步代码里获取到dom,例如请求,定时器,和vue提供的 this.$nextTick()

2.为什么不在beforeCreate钩子里发请求?

因为很多时候请求都是写在methods的方法里面,在beforeCreate里面无法调用methods的方法,所以不在beforeCreate里面发请求

3.请求到底放在created还是mounted?

都行,看情况

首先要了解一个东西,当页面有子组件的时候,页面的生命周期和子组件的生命周期是怎样的执行顺序:

父组件: beforeCreate,created,beforeMount

子组件: beforeCreate,created,beforeMount,mounted

父组件: mounted

父组件的mounted是较后才执行的

所以,如果要先渲染子组件的数据,那么请求放在mounted里面,如果先渲染父组件的请求的数据,那么请求放在created里面

如果没有子组件,那么请求放哪个里都行

4.组件进入页面会执行哪些生命周期钩子?

会执行前四个

5.keep-alive是什么?

他是用来缓存组件的,使用方法是直接把组件用它包裹,那么这个组件就会有缓存了,什么是缓存?

就是如果数据一样,那么第二次进入的时候就不会重复请求了,就会直接拿上一次的数据,提高性能

使用它会多两个钩子函数:actived和deactived

第一次进入缓存组件会执行前四个钩子加actived钩子,第二次进入只执行actived钩子,不会执行前四个钩子,所以就不会请求数据

6.vuex持久存储?

vuex本身不会持久存储,刷新页面就会回到初始值,解决方法是把state值存到本地,或者使用插件

7.路由模式的区别?

hash和history

二者明显的区别是路径长得不一样,hash有个井号

还有的区别就是,history模式会默认向后端发一次请求,而hash不会

打包方面,history模式打包后找不到页面,hash模式就可以正常浏览,前提是要在vue.config.js里的publicpath配置打包路径为./

8.data数据写在return里和外的区别?

写在return里面有响应式,外面没有

9.methods和computed区别?

computed有缓存机制

10.watch监听器

普通监听字符串普通类型没问题

但是监听复杂类型例如对象,即使开了deep属性,也拿不到旧的值

11.v-for和v-if的优先级?

vfor的优先级更高,源码的10970行左右写的,两个不能写在同一个标签里,会报错

12.ref是什么?

就是用来获取dom的

同步的生命是期函数中,只有到mounted里面才能获取到dom,前面的钩子里面是拿不到dom的。

13.scoped的原理?

他的作用是让样式只在本组件生效

原理是给class添加了自定义属性,data-xxx这样,让样式独立,就不会影响到其他组件的样式了

14.props和data的优先级谁高?

props methods data computed watch

这样的顺序,源码写的,第4325行左右

?

15.跨域问题?

可以在vue.config.js里面配置代理,但是代理在打包后是不会生效的

还有就是打包要先配置publicpath:"./"

这个配置和代理是同级别的,然后还要把理由模式改为hash,这样打包的才能看到页面不至于白屏

如果项目上线不能是hash模式,不要井号怎么办

可以让后端重定向

16.diff算法?

就是dom数据化,简单说就是把需要多次操作dom变成一次操作

例如往ul添加5个li这样的操作,不用diff算法就是每循环一次都操作一次dom,使用diff算法就是在JS里面把数据变成对象直接处理好,最终直接往ul里丢五个li,前者是操作了五次li,后者只操作了一次

转载:感谢您阅览,转载请注明文章出处“来源从小爱孤峰知识网:一个分享知识和生活随笔记录的知识小站”。

链接:关于vue2几个点的理解http://www.gufeng7.com/niaolang/1946.html

联系:如果侵犯了你的权益请来信告知我们删除。邮箱:119882116@qq.com

标签: