前端面试题之组件

14 篇文章 0 订阅

1.组件通信的方式?

1.通过$ref引用

2.通过 p a r e n t / parent/ parent/children
3.通过 e m i t / p r o p s 4. 通过 e v e n t B u s 实现兄弟组件通信( emit/props 4.通过eventBus实现兄弟组件通信( emit/props4.通过eventBus实现兄弟组件通信(emit/$on)
5.通过vuex状态管理工具

2.keep-alive 的作用是什么

他是Vue内置一个组件,由它包裹的组件会被缓存起来,重新进入页面不会重新渲染

3.让css只在当前组件中起作用

在组件的style中添加scoped

4.如何获取dom

1.在对应的DOM 元素上添加ref属性:ref="refName";获取时:this.$ref.refName
2.querySelector()/querySelectorAll():后者返回的是一个集合(dom对象本身)
3.getElementById()/getElementsByClassName/getElementsByName/getElementsByTagName 

5.$nextTick的使用

在Vue 中,并不是数据发生变化后,dom立即发生变化。当修改了data的值,然后马上获取这个dom元素的值,是不能立即获取到更新后的值。
需要使用nextTick这个回调,让修改后的data渲染到dom元素之后再获取才能成功
$nextTick 在下次dom更新循环结束之后执行,在修改数据之后调用这个函数,可以立即获取更新之后的值

6.组件插槽

匿名插槽:子组件的插槽没有name属性,或name属性为default时,为匿名插槽
具名插槽:需要使用中的name属性绑定元素
使用slot="xxx"的形式,可以在任意元素标签上
使用v-slot:xxx的形式,只能定义在template元素上

7.监听组件生命周期

比如有父组件和子组件,父组件可在监听到子组件挂载mounted就做一些逻辑处理(this.$emit(‘addevent’))。当然不仅可以监听mounted,还可以监听其他生命周期的时间,比乳created,updated
还有一种更简单的方法,子组件不需要做任何处理,在父组件引用的时候通过@hook:mounted=“addevent”

<Child @hook:mounted="addevent"/>

8.动态组件

Vue提供了一个方法来实现动态组件,也叫元组件。就是将组件动态的绑定到is特性上,依赖is的值来决定哪一个组件被渲染,最常见的就是tab切换

在这里插入代码片<template>
  <div class="hello">
    <h3>使用component 的 is特性</h3>
    <ul>
      <li v-for="(item,index) in tabList" :key="index" style="cursor:pointer" @click="changeView(index)">{{item}}</li>
    </ul>
    <component :is="currentView"></component>
  </div>
</template>

<script>
// 相关的组件代码在这里不展示
import shouji from "./shouji";
import pc from "./pc";
import shuma from "./shuma";
export default {
  name: "HelloWorld",
  components: {
    shouji,
    pc,
    shuma,
  },
  data() {
    return {
      index: 0,
      arr: ["shuma", "shouji", "pc"],
      tabList: ["数码", "手机", "电脑"],
    };
  },
  computed: {
    currentView() {
      return this.arr[this.index];
    }
  },
  methods: {
    changeView(index) {
      this.index = index;
    }
  },
};
</script>

9.如何在子组件更新父组件的值

1.使用$emit发送一个事件,父组件收到后修改
2.只要prop是对象或者数组,在子组件里面就可以修改从而改变父组件的值
3.使用vuex
4.通过.sync修饰符
该修饰符可以实现子组件与父组件的双向绑定,并且可以实现子组件同步修改父组件的值,实际上就是一个语法糖。

<Child :money.sync="dataApp"/> 
//这里的money就是需要修改的值,子组件不需要其他改变。注意子组件里的prop:money

10.重新渲染组件

1.通过v-if的切换来销毁和重建dom节点
2.通过key值的改变重新渲染dom
3.通过this.$forceUpdate()强制更新

11.一个组件如何在多个项目中复用

1.npm 发包引用
2.npm link
3.npm 本地file引用:npm install …/commom/(相对路径)

开发一个组件的流程

写完组件之后应该在组件的index里引入
在使用到的地方进行注册引入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值
>