vue3出来已经很长一段时间,项目已经用起来了。本篇是使用过程的中的一些零零散散的笔记的。
vue3基础教程:https://www.runoob.com/vue3/vue3-intro.html
在看:不要再用Vue 2的思维写Vue 3了 https://mp.weixin.qq.com/s/W_2Yb7QkcgOdewVqtaEQQQ
vue3的Compostion API时,如果还是用Vue2的形式组织代码,这不但不会提升代码质量,反而因为缺乏约束而降低可读性。 《架构整洁之道》书中提到:对于大多数应用,可维护性比可重用性更加重要。
vue3 借鉴了react hook实现了更自由的编程方式,提出了Composition API,Composition API不需要通过指定一长串选项来定义组件,而是允许用户像编写函数一样自由地表达、组合和重用有状态的组件逻辑,同时提供出色的TypeScript支持。
$children 实例 property 已从 Vue 3.0 中移除,不再支持。
Vue2.x | Vue3 |
---|---|
beforeCreate | 使用 setup() |
created | 使用 setup() |
beforeMount | onBeforeMount |
mounted | onMounted |
beforeUpdate | onBeforeUpdate |
updated | onUpdated |
beforeDestroy | onBeforeUnmount |
destroyed | onUnmounted |
errorCaptured | onErrorCaptured |
https://v3.cn.vuejs.org/guide/composition-api-setup.html
setup替代了以前的 beforeCreate 和 created ,类似于初始化的功能
import { toRefs } from 'vue'
export default {
props: {
title: String },
setup(props,context) {
console.log(props.title)
const { title } = toRefs(props)
// Attribute (非响应式对象,等同于 $attrs)
console.log(context.attrs)
// 插槽 (非响应式对象,等同于 $slots)
console.log(context.slots)
// 触发事件 (方法,等同于 $emit)
console.log(context.emit)
// 暴露公共 property (函数)
console.log(context.expose)
}}
export default {
setup(props, { attrs, slots, emit, expose }) {
...
}}
执行 setup 时,组件实例尚未被创建。因此,你只能访问以下 property:
无法访问以下组件选项:
getCurrentInstance 支持访问内部组件实例。
getCurrentInstance 只暴露给高阶使用场景,典型的比如在库中。强烈反对在应用的代码中使用 getCurrentInstance。请不要把它当作在组合式 API 中获取 this 的替代方案来使用。
getCurrentInstance 只能在 setup 或生命周期钩子中调用。
如需在 setup 或生命周期钩子外使用,请先在 setup 中调用 getCurrentInstance() 获取该实例然后再使用。
const MyComponent = {
setup() {
const internalInstance = getCurrentInstance() // 有效
const id = useComponentId() // 有效
const handleClick = () => {
getCurrentInstance() // 无效
useComponentId() // 无效
internalInstance // 有效
}
onMounted(() => {
getCurrentInstance() // 有效
})
return () =>
h(
'button',
{
onClick: handleClick
},
`uid: ${id}`
)
}
}
// 在组合式函数中调用也可以正常执行
function useComponentId() {
return getCurrentInstance().uid
}
Vue 3 把大多数全局 API 和 内部 helper 移到了 ES 模块中导出(譬如 v-model、transition、teleport),从而使得 Vue 3 在增加了很多新特性之后,基线的体积反而小了。
具体查看:
Vue3时jsx组件绑定自定义的事件、v-model、sync修饰符
同行文章:
vue3最全的jsx教学,保证业务上手无问题!手敲代码,有知识点,附带和temp https://www.dht.red/blog/blog_content?article_id=54
转载本站文章《踩坑笔记:组合式 API之Setup(props,context)—Vue2.x到Vue3注意》, 请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/vue3/8682.html
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。