Vite 命令$ npm init vite-app$ yarn create vite-app等价于$ yarn global add create-vite-app 然后cva等价于$ npx createa-vite-app//或$ pnpm create vite <project-name> -- --template vue
Setup()
- setup() 函数是 vue3 中,专门为组件提供的新属性。它为我们使用 vue3 的 Composition API 新特性提供了统一的入口。 setup 函数会在 beforeCreate 之后、created 之前执行。
- setup是一个新的组件选项,也是其他API的入口。 所有的操作都将在setup函数内部定义和执行, Vue3.0也将用函数代替Vue2.x的类也就是new Vue()
setup函数中的第一个参数是props参数。setup函数中的props是响应式的,当传入新的 prop 时,它将被更新。- 传递给
setup函数的第二个参数是context。context是一个普通的 JavaScript 对象,它暴露三个组件 property。// MyBook.vueexport default {setup(props, context) {// Attribute (响应式 object)console.log(context.attrs)// Slots (响应式 object)console.log(context.slots)// Emit 事件 (方法)console.log(context.emit)}}
Ref()
ref是Composition API 引入的新概念。作用是使访问响应式的变量不依赖于实例的this。如果使用了ref,我们访问响应式的变量时使用.value而不是从this中获取,其底层是采用reactive方法实现。ref 会返回一个可变的响应式对象,该对象作为它的内部值——一个*响应式的引用,这就是名称的来源。此对象只包含一个名为 value 的 property` :
import { ref } from 'vue'const count = ref(0)console.log(count.value) // 0count.value++console.log(count.value) // 1
v-model文档
在 3.x 中,自定义组件上的 v-model 相当于传递了 modelValue prop 并接收抛出的 update:modelValue 事件:
<ChildComponent v-model="pageTitle" /><!-- 简写: --><ChildComponent:modelValue="pageTitle"@update:modelValue="pageTitle = $event"/>
$event 的值是 emit 的第二个参数
emit(事件名, 事件参数)
<Switch :value="y" @update:value="y = $event"/>可以简写为<Switch v-model:value="y" />------------setuop(props,context){const toggle = () => {context.emit('init', !props.value)}return {toggle}}
Vue 3 属性绑定
默认所有属性都绑定到根元素
使用 inheritAttrs: false 可以取消默认绑定
使用 $attrs 或者 context.attrs 获取所有属性
使用 v-bind=”$attrs” 批量绑定属性
使用 const {yyy, xxx, …rest} = context.attrs 将属性分开
props V.S. attrs
props 要先声明才能取值,attrs 不用先声明
props 不包含事件,attrs 包含
props 没有声明的属性,会跑到 attrs 里
props 支持 string 以外的类型,attrs 只有 string 类型
onMount 和 onUpdate 可以用 watchEffect代替
const count = ref(0)watchEffect(() => console.log(count.value))// -> logs 0setTimeout(() => {count.value++// -> logs 1}, 100)
如果在onMounted之前不更新可以用onMounted套起来
onMounted(() => {watchEffect(() => {// access the DOM or template refs})})
Vue 2 和 Vue 3 的小区别
- Vue 3 的 Template 支持多个根标签,Vue 2 不支持
- Vue 3 有 createApp(),而 Vue 2 的是 new Vue()
- createApp(组件),new Vue({template, render})
- 新 v-model 代替以前的 v-model 和 .sync 新增
- context.emit(setup里使用),与 this.$emit 作用相同(methods里写)
