Appearance
Vue3
setup
- 在
setup中应避免使用this,因为它不会找到组件实例。setup的调用发生在dataproperty、computedproperty和methods被解析之前,所以它们无法在setup中获取。 - 因为
setup是围绕beforeCreate和created生命周期钩子运行的,所以不需要显示的定义它们。也就是说,在beforeCreate和created中编写的任何代码,都可以直接在setup函数中编写。 setup选项是一个接收props和context的函数,setup(props, context)props:props参数是响应式的,需要先声明props属性才能获取到js因为export default { props: { title: String }, setup(props) { console.log(props.title) } }props是响应式的,不能使用ES6解构,它会消除prop的响应性。 如需要解构props,可在setup中使用toRefs函数来完成:js如果import { toRefs } from 'vue' setup(props) { const { title } = toRefs(props); console.log(title.value) }title是可选的prop,则传入的props中可能没有title。这种情况toRefs将不会为title创建一个ref。你需要使用toRef代替它:jsimport { toRef } from 'vue' setup(props) { const title = toRef(props, 'title') console.log(title.value) }context:context参数是一个普通JavaScript对象(非响应式) 在执行setup时,可以访问一下property:porps,attrs,slots,emit; 不能访问一下选项:data,computed,methods,refs
- 如果
setup返回一个对象,那么该对象的property以及传递给setup的props参数中的property都可以在模板中访问。从setup返回的refs在模板中访问时是被自动浅解包的,因此不应该在模板中使用.value setup还可以返回一个渲染函数,当我们想要将这个组件的方法通过模板ref暴露给父组件时,需要使用expose来解决
js
import { h, ref } from 'vue'
export default {
setup(props, {expose}) {
const count = ref(0)
const increment = () => ++count.value
expose({
increment
})
return () => h('div', count.value)
}
}watch和watchEffect
- 与 watchEffect 比较, watch 允许我们:
- 懒执行副作用
- 更具体的说明什么状态应该处罚侦听器重新运行
- 访问侦听器状态变化前后的值
