2024年八股文前端高频口试题(js、vue2、vue3、uniapp、es6、echarts、webpa ...

打印 上一主题 下一主题

主题 836|帖子 836|积分 2508

内容较多需要分几部
一.vue2口试题 - 生命周期有哪些?发送哀求在created还是mounted?

1.1.生命周期有哪些

  1. vue2.X系统自带有8个
  2. beforeCreate  
  3. created
  4. beforeMount
  5. mounted
  6. beforeUpdate
  7. updated
  8. beforeDestroy
  9. destroyed
复制代码
1.2.进入组件实行哪些生命周期
  1. beforeCreate
  2. created
  3. beforeMount
  4. mounted
复制代码
1.3在created中怎样获取dome

  1. 只要异写异步代码,获取dom在异步中获取的就可以
  2. 定时器方法
  3. setTimeout(()=>{
  4.     获取dome的方法
  5. })
  6. vue自带nextTick方法
  7. this.$nextTick(res=>{
  8. 获取dome的方法
  9. })
复制代码
1.4为什么发送哀求不在beforeCreate里?

  1. 如果请求是在methods封装好的,在beforeCreate掉用的时候是拿不到methods里面的方法的
复制代码
1.5beforeCreate和created有什么区别

  1. beforeCreate中没有$data
  2. created中有$data
  3. created中是可以拿到methods中的方法的
复制代码
 1.6.父组件引入子组件生命周期实行顺序 

父组件引入了子组件,会先实行父组件的前3个生命周期,再实行子组件的4个生命周期
  1. 父:beforeCreat、create、beforeMount
  2. 子:beforeCreate、create、beforeMount、mounted
  3. ...
  4. 父:mounted
复制代码
1.7发送哀求在created中mounted?

  1. 这个问题需要看具体情况,按照上面的父组件引入子组件的顺序来看,   
  2. 如果需要优先加载子组件内容需要再mounted中,如果组件间没有依赖关系,在哪个都可以
复制代码
1.8加入keep-alive组件会实行哪些生命周期

假如使用了keep-alive组件,当前的组件会额外增加两个生命周期(体系8+2)
  1. activated     进入到组件   激活时
  2. deactivated   销毁时
复制代码
假如加入keep-alive第一次进入会实行5个生命周期
  1. beforeCreate
  2. created
  3. beforeMount
  4. mountedactivated
复制代码
1.9第二次或者第N次进入组件会实行哪些生命周期

  1. activated假如没加入keep-valive会永远实行beforeCreate
  2. created
  3. beforeMount
  4. mounted
复制代码
2.0你在什么环境下使用过哪些生命周期,说一说生命周期的使用场景

  1. created       单组件请求
  2. mounted       同步获取dom, 如果子组件先请求父组件再请求
  3. activated     判断id是否相同,如果不相同发起请求
  4. deactivated   关闭页面记录视频播放时间,初始化的时候从上一记录开始
复制代码
二.关于组件

2.1组件传值(通信)的方式

  1. 父传后代 (后代拿到了父的数据)
  2. 1.子组件通过props来接受父的传参
  3. props:{
  4.     str1:{
  5.         type:String,
  6.         default:''
  7.       }
  8. }
  9. *这种方式父传子方便,但是传孙子背比较困难,并且不能修改父组件中的数据*
  10. 2.子组件直接使用父组件中的数据
  11. 子组件通过  this.$parent.xxx使用父组件中的数据
  12. *子组件可以直接修改父组件中的数据*
  13. *缺点:这可能会破坏组件的封装性和可维护性。*
  14. 3.依赖注入
  15. 优势:父组件可以直接向某个后代组件传递参数,(不需要一级一级的找)
复制代码
  1. 后代传父(父拿到了后代的数据)
  2. 1.子组件传给父组件
  3.      子组件自定义事件  this.$emit('事件名字',传值)
  4.      父组件   <组件名 @事件='事件名字'> </组件名>
  5.      在methods中使用
  6. 2.
复制代码
  1. 平辈之间传值(兄弟可以拿到数据)
复制代码
2.2父组件直接修改子组件中的值

  1. 1.   使用this.$children
  2.      注意this.$children获取得是一个数据使用的时候应该:   this.$children [索引]
  3.      * 繁琐 *
  4. 2.  <组件名 ref='命名'></组件名>
  5.       this.$refs.命名.xxx = 'yyyyy'
复制代码
2.3子组件怎样修改父组件中的值

  1. 可以使用  this.$parent.xxx  获取到父组件中的值并修改
复制代码
2.4怎样找到父组件

  1. this.$parent
复制代码
2.5怎样找到根组件

  1. this.$root
复制代码
2.6keep-alive

  1. keep-alive是什么:  用来缓存当前组件的
复制代码
2.7slot/插槽

  1. 1.匿名插槽:(没有名字)
  2. 子组件  
  3. <div>
  4.     <div>返回</div>
  5.     <slot></slot>
  6. </div>
  7. <组件名> <div style='color:pink'>温馨提示</div></组件名>
  8. 注意:  匿名插槽中的slot代表的是  组件的包括的所有内容
  9. 2.具名插槽(有名字)
  10. 子组件
  11. <div>
  12.     <slot name="title"></slot>
  13.     <div>返回</div>
  14.     <slot name="text"></slot>
  15. </div>
  16. <组件名>
  17.       <template #title>
  18.         <h2 style="color: pink">标题</h2>
  19.       </template>
  20.       <template #text>
  21.         <div style="color: pink">温馨提示</div>
  22.       </template>
  23. </组件名>
  24. 注意:  名字需要在template标签中
  25. 3.作用域插槽(传值)
  26. 子组件
  27. <div>
  28.     <slot name="title"></slot>
  29.     <div>返回</div>
  30.     <slot name="text" :arr='arr'></slot>
  31. </div>
  32. data(){
  33.     return {
  34.         arr:['a','b','c']
  35.     }
  36. }
  37. 父组件接收
  38. <template #text='{arr}'>
  39.      <div style="color: pink">温馨提示</div>
  40. </template>
  41. 注意:   传多个使用,隔开  {arr,list,str}
复制代码
2.8provide/inject

  1. provide/inject  ===>  依赖注入
  2. // 父级组件提供 'foo'
  3. <template>
  4.   <div>
  5.     <div>{{foo}}</div>
  6.     <son></son>
  7.   </div>
  8. </template>
  9. <script>
  10. import Son from "./Son";
  11. export default {
  12.   name: "parent",
  13.   components: { Son },
  14.   provide() {
  15.     return {
  16.       foo: this.foo
  17.     };
  18.   },
  19.   data() {
  20.     return {
  21.       foo: {
  22.            too:"测试"
  23.         },
  24.     };
  25.   },
  26.   mounted() {
  27.     console.log(this.foo)
  28.   },
  29. };
  30. </script>
  31. //孙级组件,接收foo
  32. <template>
  33.   <div>{{foo}}</div>
  34. </template>
  35. <script>
  36. export default {
  37.   name: "grandSon",
  38.   inject: ["foo"],
  39.   mounted() {
  40.     console.log(this.foo)
  41.   },
  42. };
  43. </script>
复制代码
2.9怎样封装组件

  1. 组件一定要难点,设计的知识点:slot,组件通信...
复制代码
三关于VueX

3.1VueX有哪些属性

  1. 1.state 全局共享属性存放数据
  2. 2.getters  针对数据进行二次修改
  3. 3.mutations
  4. 4.actions
  5. 5.modules   
复制代码
3.2VueX使用state值

  1. 1.this.$store.state.xxx
  2. 2.辅助函数  mapState
  3. import { mapState } from "vuex";
  4. computed:{
  5.   ...mapState(['str'])
  6. },
  7. 在页面上直接使用str   ,  在方法中this.str
  8. 以上两种都可以拿到state的值, 那么他们的区别是什么
  9. 使用this.$store.state.xxx  可以直接修改vueX里面的数据
  10. 使用辅助函数的形式是不可以修改的(辅助函数是复制了vuex文件里的内容,所以不能修改)
复制代码
3.3VueX的getters值的修改

getters是针对于数据进行二次修改的
组件使用了getters中的内容,组件使用v-model的情势会发生什么
  1. getters的值是不能被修改的
复制代码
3.4VueX的mutations和actions区别

  1. 相同点:mutations和actions都是来存放全局方法的
  2. 这个全局方法return的值拿不到
  3. 区别:
  4. mutations ==>>  同步
  5. actions   =>> 返回的诗一个Promise对象,他可以执行相关异步操作
  6. mutations是来修改state的值的,actions的作用是来提交mutations
复制代码
3.5VueX长期化存储

  1. vuex本身不是持久化存储的数据,vuex是一个状态管理仓库
  2. (state:全局属性)==>>就是存放全局属性的地方
复制代码
  1.  实现持久化存储:
  2. 1.自己写localStorage,
  3. 2.使用vuex-persistedstate插件(下方插件使用方式)
  4. 下载安装插件进行持久化存储
  5. npm install vuex-persistedstate --save
  6. 配置
  7. import createPersistedState from 'vuex-persistedstate';
  8. vue.use(Vuex)
  9. // vuex数据持久化配置
  10.   plugins:[
  11.     createPersistedState({
  12.       storage:window.sessionStorage,
  13.       key:"store",
  14.       render(state){
  15.         return {...state}
  16.       }
  17.     })
  18.   ]
复制代码
四.关于路由                

4.1路由的模式和区别

  1. 1.history
  2. 2.hash
复制代码
  1. 区别:
  2. 1.关于找不到页面当前页面发送请求的问题
  3. history会给后端发送一次请求
  4. hash不会给后端发送请求
  5. 2.关于项目打包前端自测问题
  6. hash 是可以看到内容的
  7. history  默认情况下是看不到内容的
  8. 3.关于表象不同
  9. hash:    #
  10. history: /
复制代码
4.2.子路由和动态路由

4.3路由传值

  1. 一.vue路由传值有4种方式
  2. 接收方式
  3. mounted () {
  4.   this.num = this.$route.params.num
  5. }
  6. 1.利用router-link路由导航来传递
  7. <router-link to = "/跳转路径/传入的参数"></router-link>
  8. 2.调用$router.push实现路由传值  (通过事件触发)
  9. deliverParams (id) {
  10.   this.$router.push({path: `/d/${id}`
  11. })
  12. 路由配置:{path: '/d/:id', name: D, component: D}
  13. http://localhost:8080/#/d/123
  14. 3.通过路由属性中的name来匹配路由,再根据params传递参数值
  15. this.$router.push({
  16.         name: 'B',
  17.         params: {sometext: '熊出没'}
  18. })
  19. 路由配置:{path: '/b', name: 'B', component: B}
  20. http://localhost:8080/#/b
  21. 4.通过query来传递参数
  22. this.$router.push({
  23.         path: '/c',
  24.         query: {sometext: '我是光头强'}
  25. })
  26. 路由配置:{path: '/c', name: 'C', component: C}
  27. http://localhost:8080/#/c?sometext=%E8%BF%99%E6%98%AF%E5%B0%8F%E7
复制代码
4.4导航故障

       官网说明
等候导航结果 | Vue RouterVue.js 的官方路由
https://router.vuejs.org/zh/guide/advanced/navigation-failures.html        
  1. 解决方法:
  2. 在跳转的后面加  .catch(error=>error)
复制代码
        
4.5$router和$route的区别

       CSDN具体使用介绍https://blog.csdn.net/qq_45838276/article/details/126890883?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172371411616800225554504%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=172371411616800225554504&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-126890883-null-null.142^v100^control&utm_term=%24router%E5%92%8C%24route%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187
https://blog.csdn.net/qq_45838276/article/details/126890883?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172371411616800225554504%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=172371411616800225554504&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-126890883-null-null.142%5Ev100%5Econtrol&utm_term=%24router%E5%92%8C%24route%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187
  1. 1、$router是用来操作路由,不仅包含路由还包含整个路由的属性和方法
  2.    $route是用来获取路由信息,包含当前路由
  3. 2. $router是VueRouter的一个实例,他包含了所有的路由,包括路由的跳转方法,
  4.    钩子函数等,也包含一些子对象(例如history)
  5. 3.route是一个跳转的路由对象(路由信息对象),每一个路由都会有一个$route对象,是一个局部的对象。
复制代码
4.6.导航守卫

  1. 1.全局守卫
  2.   beforeEach  路由进入之前
  3.   afterEach   路由进入之后
  4. 2.路由独享守卫
  5.    beforEnter   路由进入之前
  6. 3.组件内守卫
  7.   beforeRouteEnter  路由进入之前
  8.   beforeRouteUpdate 路由更新之前
  9.   beforeRouteleave 路由离开之前
复制代码
五.关于API

5.1$set

  1. 碰到数据更新,视图没有更新的问题==>>$set
  2. $set('需要修改的参数','第几个','修改成什么')
  3. this.$set(target,key,'修改后的值')
复制代码
5.2$nextTick

  1. 在vue的生命周期中,beforeCreate或created中如何去获取dom
  2. 1.使用异步获取去,定时器
  3. 2.使用vue中自带的API$nextTick
  4. $nextTick返回的参数(函数),是一个异步
  5. 源码|原理
  6. $nextTick(callback){
  7.     return Promise.resolve().then(()=>{
  8.     callback();
  9.     })
  10. }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
复制代码
5.3$refs   

  1. 1.this.$refs     获取dome的
  2. 使用   
  3. <子组件 ref='命名'></子组件>
  4. this.$refs.命名       获取到子组件信息
复制代码
5.4 $el

  1. $el   获取当前组件的根节点
复制代码
5.5$data

  1. $data   获取当前组件的data数据
复制代码
5.6$children

  1. $children  获取当前组件的说有子组件的,返回的是一个数组
复制代码
5.7 $parent

  1. $parent   找到当前组件的父组件,如果找不到返回自身
复制代码
5.8 $root

  1. $root   找到根组件
复制代码
5.9data定义数据

  1. 在data中定义数据,   在return里面和在return外面定义数据的区别
  2. 1.return外: 单纯修改数据是不可以被修改的,因为没有get/set
  3. 2.return内: 是可以修改的
复制代码
5.10 computed计算属性

  1. computed的计算属性的结果值,可以修改吗?
  2. 可以的,需要通过get/set写法
  3. 当前组件v-model绑定的值是computed来的,那么可以修改吗?可以的,需要通过get/set写法
复制代码
5.11 watch

  1. 深入监听   
  2. hello: {
  3.       handler(newval, oldval) {
  4.         console.log(newval, oldval);
  5.       },
  6.       immediate:true  //立即侦听
  7. }
  8. hello(newhello,oldhello){
  9.     console.log(newhello,oldhello);
  10. }
  11. 还可以监听路由/路径变化
复制代码
5.12 methods和computed区别

  1. conputed是有缓存机制的,methods是没有缓存机制的
复制代码
6.关于指令

6.1怎样自定义指令

  1. 全局  main.js   
  2. Vue.directive('demo',(
  3.     insetted:function(a,b,c){
  4.         console.log(a,b,c)
  5.     }
  6. ))
  7. 局部:某一个组件内
  8. export default(
  9.     directives:{
  10.         demo:{
  11.             bind:function(el){
  12.               console.log(1)
  13.             }
  14.         }
  15.     }
  16. )
复制代码
6.2vue单项绑定

  1. 双向绑定  v-model
  2. 单项绑定: v-bind
复制代码
6.3v-if和v-for优先级

  1. vue2 中  v-for > v-if
  2. vue3 中  v-if  > v-for
复制代码
七.关于原理

7.1.$nextTick原理

  1. $nextTick  获取更新后的dome的
  2. 原理
  3. $nextTick(callback){
  4.     return Promise.resolve().then(()=>{
  5.     callback();
  6.     })
  7. }   
复制代码
7.2.双向绑定原理

  1. 1.Object.defineProperty(obj, prop, descriptor) ,这个语法内有三个参数,
  2. 分别为 obj (要定义其上属性的对象); prop (要定义或修改的属性); descriptor (具体的改变方法)
  3. 2、简单地说,就是用这个方法来定义一个值。当调用时我们使用了它里面的get方法。
  4. 当给这个属性赋值时,就调用了它里面的set方法;
  5. var obj = {}
  6. Object.defineProperty(obj,'prototypeName',{
  7.         get: function() {
  8.                 console.log("调用了get")
  9.         },
  10.         set: function(newValue) {
  11.                 console.log("调用了set,新值是"+newValue)  
  12.         }
  13. })
  14. obj.prototypeName    // 调用了get
  15. obj.prototypeName = 'hello'   // 调用了set,新值是hello
复制代码
一.Vue框架篇

vue2.x生命周期

  1. 1.有哪些生命周期
  2. 系统自带
  3. beforeCreate  
  4. created
  5. beforeMount
  6. mounted
  7. beforeUpdate
  8. updated
  9. beforeDestroy  //销毁
  10. destroyed
  11. 2.一旦进入到页面或组件,会执行哪些生命周期,顺序
  12. beforeCreate  
  13. created        
  14. beforeMount      
  15. mounted      
  16. 3.在哪个阶段有$el(这个组件的根节点),在哪个阶段有$data(data中return数据)
  17. beforeCreate  
  18. created           $data
  19. beforeMount       $data
  20. mounted       $el $data
  21. 4.如果加入了keep-alive会多两个生命周期
  22. activated   ,   deactivated
  23. 5.如果加入了keep-alive第一次或第二次进入会执行哪些生命周期
  24. 第一次进入执行5个生命周期
  25. beforeCreate  
  26. created        
  27. beforeMount      
  28. mounted   
  29. activated
  30. 第二次进入执行1个生命周期
  31. activated
复制代码
谈谈你对keep-alive的相识

  1. 1.是什么
  2. vue系统自带的一个组件,功能:是来缓存组件的. >>提升性能
  3. 2.使用场景
  4. 就是来缓存组件的,提升项目的性能,具体实现比如,首页进入到详情页,如果用户在首页每次点击都是相同的,
  5. 直接缓存就可以了,当然如果点击的不是同一个,那么直接请求
复制代码
v-if和v-show区别

  1. 1.展示形式不同
  2. v-if是 创建一个dome节点
  3. v-show 是把dome节点隐藏起来, display:none   block
  4. 2.使用场景
  5. 初次加载v-if要比v-show好,页不会做加载盒子
  6. 频繁切换,  v-show要比v-if好,创建和删除开销太大,  隐藏起来比较好
复制代码
ref是什么

  1. 来获取dome的
  2. vue提供获取dome的东西
复制代码
nextTick是什么

  1. 异步获取dome
  2. 列:获取最新的dome
复制代码
scoped原理

  1. 样式在本组件中生效
复制代码
vue组件之间怎样传值

  1. 1.父组件 传值 子组件
  2. 2.子组件 传值 父组件
  3. 3.兄弟组件之间传值
  4. 使用bus 建立一个中转js,
  5. 引入bus.js文件
  6. 使用bus.$emit('自定义事件',传值)
  7. 兄弟组件使用bus.$on('自定义事件',data=>{
  8.    
  9.     })接收
复制代码
computed ,  methods , watch有什么区别

  1. 1.computed  vs  methods有什么区别
  2. computed在dome中使用连续调用只执行一次,有缓存
  3. methods在dome中连续调用,会执行多次,没有缓存
  4. 1.computed  vs  watch有什么区别
  5. watch是监听,数据或者是路由发生了改变才可以响应(执行)
  6. computed计算某一个属性的改变,如果某一个值改变了,计算属性监听到了就会返回
复制代码
23.vue2和vue3的区别



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表