vue3快速过day1

106 阅读3分钟

语法糖setup()

setup 里的this是undefine
比选项式api执行的更加的早(也就是选项式可以读取到setup里的东西)

响应式基础

  • ref() 接收参数,并将其包裹在一个带有 .value 属性的 ref 对象中返回;
  • 注意,在模板中使用 ref 时,我们需要附加 .value

  • 与将内部值包装在特殊对象中的 ref 不同,reactive() 将使对象本身具有响应性
  • 有限的值类型:它只能用于对象类型 (对象、数组和如 MapSet 这样的集合类型)。它不能持有如 stringnumber 或 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)=>() ) 监视对象的话监视地址值

  1. 监视ref定义的数据
  2. 监视reactive对象(默认开启深度监视)
  3. getter()函数
  4. 上述组合形式

vue3生命周期.png

组件通信 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则不能回退