语法糖setup()
setup 里的this是undefine
比选项式api执行的更加的早(也就是选项式可以读取到setup里的东西)
响应式基础
ref()接收参数,并将其包裹在一个带有.value属性的 ref 对象中返回;- 注意,在模板中使用 ref 时,我们不需要附加
.value。
- 与将内部值包装在特殊对象中的 ref 不同,
reactive()将使对象本身具有响应性 - 有限的值类型:它只能用于对象类型 (对象、数组和如
Map、Set这样的集合类型)。它不能持有如string、number或boolean这样的原始类型。 - 不能替换整个对象:由于 Vue 的响应式跟踪是通过属性访问实现的,因此我们必须始终保持对响应式对象的相同引用。这意味着我们不能轻易地“替换”响应式对象,因为这样的话与第一个引用的响应性连接将丢失:
- 对解构操作不友好:当我们将响应式对象的原始类型属性解构为本地变量时,或者将该属性传递给函数时,我们将丢失响应性连接:
由于这些限制,我们建议使用 ref() 作为声明响应式状态的主要 API。
ref还可以拿到原生的dom节点 或者组件实例。
转换:
toRefs():将一个响应式对象转换为一个普通对象,这个普通对象的每个属性都是指向源对象相应属性的 ref。每个单独的 ref 都是使用toRef()创建的。toRef():可以将值、refs 或 getters 规范化为 refs (3.3+)。 也可以基于响应式对象上的一个属性,创建一个对应的 ref。这样创建的 ref 与其源属性保持同步:改变源属性的值将更新 ref 的值,反之亦然。
计算属性computed()
- 接受getter函数,返回值只读
watch()
watch(监视的数据源,(newVal,oldVal)=>() ) 监视对象的话监视地址值。
- 监视ref定义的数据
- 监视reactive对象(默认开启深度监视)
- getter()函数
- 上述组合形式
组件通信 props
- Props 是一种特别的 attributes,你可以在组件上声明注册。要传递给博客文章组件一个标题,我们必须在组件的 props 列表上声明它。这里要用到
defineProps宏 - 如果你没有使用
<script setup>,props 必须以props选项的方式声明,props 对象会作为setup()函数的第一个参数被传入 defineProps是一个仅<script setup>中可用的编译宏命令,并不需要显式地导入。声明的 props 会自动暴露给模板。defineProps会返回一个对象,其中包含了可以传递给组件的所有 props
路由模式
histroy:createWebHistroy ; hash: creatfeWebHashHistroy
(前置知识)当你点击 <router-link> 时,内部会调用这个方法,所以点击 <router-link :to="..."> 相当于调用 router.push(...)
| 声明式 | 编程式 |
|---|---|
<router-link :to="..." > | router.push(...) |
<router-link to='跳转路由'>跳转,<router-view> 渲染组件
- router 传query参数, router.push(path/name,query:对象)
- router 传params参数 router.push)(name(只能用name),params:对象)
- 因为在
setup里面没有访问this,所以我们不能再直接访问this.$router或this.$route。作为替代,我们使用useRouter和useRoute函数: - 当路由中
props设置为true时,route.params将被设置为组件的 props。 - push 有历史栈记录,可以回退,而replace则不能回退