1.defineComponent 的作用
vue3中,新增了 defineComponent ,它并没有实现任何的逻辑,只是把接收的 Object 直接返回,它的存在是完全让传入的整个对象获得对应的类型,它的存在就是完全为了服务 TypeScript 而存在的。
2.setup中可以写哪些函数
setup中可以使用data,method,watch,computed 以及生命周期函数(onBeforeMount、onMounted、onBeforeUpdate、onUpdated、onBeforeUnmount、onUnmounted、onActivated、onDeactivated、onErrorCaptured)。
我们需要注意的是:当setup()和 data() 中存在相同数据时,setup() 中的优先级高; 当setup()和 methods 中存在相同函数时,也是 setup() 中的优先级高。
3.怎么将数据变成响应式?ref 和 reactive 的区别
Vue3.0 将响应式系统进行了解耦,从主体代码中抽离了出来,这意味着,我们可以将 Vue3.0 的响应式系统视作一个单独的库来使用。Vue3.x 中可以使用 ref 和 reactive 将数据变成响应式的。
ref接受一个内部值并返回一个响应式且可变的 ref 对象。ref 对象具有指向内部值的单个 property .value。
const count = ref(0)
console.log(count.value) // 0
count.value++
console.log(count.value) // 1
如果将对象分配为 ref 值,则通过 reactive 函数使该对象具有高度的响应式。
reactive 返回对象的响应式副本
const obj = reactive({ count: 0 })
响应式转换是“深层”的——它影响所有嵌套 property。在基于 ES2015 Proxy 的实现中,返回的 proxy 是不等于原始对象的。在使用中建议只使用响应式 proxy,避免依赖原始对象。
4.怎么使用watch监听数据的变化
在setup 中使用watch 或者像在vue2.x中一样在与setup 同级使用watch。 当在setup内部和外部监听的同一个数据变化时,会触发各自的回调函数。