vue3.2知识点记录

191 阅读2分钟

vue3面试知识点

1.vue3对比vue2的优势

1.性能更好,体积更小 2.更好的ts支持 3.更好的代码组织,更好的逻辑抽离

2.vue3生命周期的改动

beforeDestroy改成beforeUnmount;destroyed改成unmounted

3.setup中如何获取组件实例?

在setup和其他Composition API中没有this,可以通过getCurrentInstance获取当前实例

4.Composition API和React Hooks对比

前者setup只会被调用一次,后者函数会被多次调用(useMemo、useCallback);前者无需顾虑调用顺序,后者要保证hooks的顺序一致

5.vue3 Composition API如何实现逻辑复用?

1.抽离逻辑代码到一个函数 2.函数命名约定为useXxx(类似React Hooks) 3.在setup中引用useXxx函数

6.vue3中的ref

1.生成值类型的响应式数据 2.可用于模板和reactive(不需要加.value) 3.通过.value修改值

7.为什么需要ref?

1.返回值类型,会丢失响应式 2.在setup、computed、合成函数,都有可以能返回值类型

toRef和toRefs总结

1. toRef

1.针对一个响应式对象(reactive封装)的prop,而toRef如果用于非响应式对象,产生的结果不具备响应式

2.创建一个ref,具有响应式

3.两者保持引用关系

setup() {
  const state = reactive({
    name: 'Messi',
    age: 33
  })
  const ageRef = toRef(state,'age')
  return {
    state,
    ageRef
  }
}

2. toRefs

1.将响应式对象(reactive封装)转换为普通对象 2.对象的每个prop都是对应的ref 3.两者保持引用关系

setup() {
  const state = reactive({
    name: 'Messi',
    age: 33
  })
  const stateAsRefs = toRefs(state)
  return stateAsRefs  
}

3. toRefs使用场景

合成函数返回响应式对象

function useXxxx() {
  const state = reactive({
    x: 1,
    y: 2
  })
}

......

//返回时转换为ref
return toRefs(state)
export default {
  setup() {
    //可以在不失去响应式的情况下破坏结构
    const { x, y } = use Xxxx() {
      return {
        x,
        y
      }
    }
  }
}

4. 总结

1.用reactive做对象的响应式,ref做值类型的响应式

2.setup中返回toRefs(state),或者toRef(state, 'xxx')

3.ref的变量名用xxxRef

4.合成函数返回响应式对象,使用toRefs

5. 为什么需要toRef和toRefs?

1.初衷:在不丢失响应式的情况下,把对象数据分解、扩散

2.前提:针对的是响应式对象(reactive封装的)非普通对象

3.不创造响应式,而是延续响应式