composition用法,Composition API原理深度剖析

本文探索内容包括:

  • composition和options如何做到和谐共存?
  • setup中的this指向哪?
  • setup的参数是什么?
  • setup的执行时刻
  • setup中的生命周期钩子是怎么实现的?

下面,正式开始表演闪电五连鞭,我们点到为止

第一鞭:composition和options如何做到和谐共存?

小右同学在vue3中引入composition api,起初很多人害怕它会影响我们一直熟悉的options写法,事实上两者可以共存,而且还很和谐,谁说年轻人不讲武德?小右这一拳明明是点到为止~

下面看一下vue3中如何两者和谐共存:

截屏2020-11-13 下午2.02.46

截屏2020-11-13 下午2.07.10

截屏2020-11-13 下午2.16.24

截屏2020-11-13 下午2.13.50

结论:到这里我们知道了vue3对setup和其他选项的处理逻辑:如果设置了setup则先调用它,随后再处理别的options。

但是现在的年轻人不讲武德,他们可能不按套路出拳,比如:

// data和setup中都定义了foo,那谁起作用哪?
createApp({
  data() {
    return {
      foo: 'foo'
    }
  },
  setup(props, ctx) {
    const foo = ref('foo in setup')      
    return { foo }
  }
}).mount('#app')
复制代码

img

小右可不是假大师,自然会

截屏2020-11-14 下午1.06.50

截屏2020-11-14 下午1.45.40

截屏2020-11-14 下午1.51.43

第二鞭:setup中的this指向哪?

我们看看setup被调用时时怎么处理的:

截屏2020-11-14 下午2.02.02

截屏2020-11-14 下午2.25.59

结论:所以setup中的this就是它执行时的上下文,如果是esm方式打包,会是undefined;如果是单文件的方式运行,会是window;但是不管怎样都没有什么意义,所以请大家彻底忘了this吧,再也不用被它烦恼了。

第三鞭:setup的参数是什么?

我们看看setup执行时都传了什么进去:

午2.46.25

参数4开始分别是instance.propssetupContext

截屏2020-11-14 下午2.56.54

再看看setupContext

截屏2020-11-14 下午2.59.20

结论:参数1是组件属性对象,它是Proxy对象,所以我们不能解构它,否则将失去响应性;参数2 是个对象,attrs可以访问组件所有特性,slots可以访问插槽内容,包括普通的和作用域插槽,它们都是函数,执行之后才能获取vnode数组。emit用来派发自定义事件。

// 不能解构props, 可以解构setupContext
setup({ foo, bar }, { attrs, slots, emit }) {
    watchEffect(() => {
    console.log(foo, bar) // foo,bar发生变化,也不会有输出
  })
}
复制代码

第四鞭:setup的执行时刻

setup执行时刻非常早,甚至比beforeCreated还早:

aaa

结论:setup里面没有beforeCreatecreated,相关代码写到setup里面就行;setup执行时会传入组件实例,因此在里面可以通过getCurrentInstance()访问到它。

第五鞭:setup中的生命周期钩子是怎么实现的?

setup里面可以很灵活的使用生命周期钩子,它们可以多次编写,最后会按注册顺序依次执行:

setup() {
  onMounted(() => {})
  onMounted(() => {})
}
复制代码

这是怎么实现的哪?我们去看看onMounted之类函数的实现:

image-20201114215005015

截屏2020-11-14 下午10.09.30

看看这些钩子的别名

最后自然是这些钩子的调用

截屏2020-11-14 下午10.22.18

遍历执行它们


composition用法,Composition API原理深度剖析的相似文章

vue3 composition api文档,Vue3.2 setup语法糖、Composition API、状态库Pinia归纳总结分析【Vue3官方教程】🎄万字笔记 | 同步导学视频分析Vue3 全家桶 + TS+ Vite2 + element-plus 搭建简洁时尚的博客网站实战及踩坑记分析vue代理服务器proxy配置,Vue3.0里为什么要用 Proxy API 替代 defineProperty API ?分析vite vue3 typescript,vite工程化实践分析compositionapi 详解,Composition-API实操还觉得短吗分析vue3和react,拿下vue3你要做好这些准备分析Vue3丨从 5 个维度来讲 Vue3 变化分析Vue3 的 script setup 语法糖是真的的香,学习使我进步分析