为什么需要Composition API ?

主要原因:当一个组件的变得逻辑复杂的时候,痛点:多种逻辑代码被分散到组件的各个部分,比如代码的相关逻辑可能会在 data: {...},computed: {...}, methods: {...}, watch:{...}这些模块中的任何一处,维护这个组件的时候需要各种"Jump" 去寻找相关的代码逻辑

setup 方法:

setup这个方法用法极其类似 react的hook。

需要注意的是:在setup这个方法中是不能调用 local state、computed properties、methods 这些数据或者方法,并且也没有 this的概念。因为在执行setup的时候组件并没有实例化完成。


// src/components/UserRepositories.vue
import { fetchUserRepositories } from '@/api/repositories'
export default {
components: { RepositoriesFilters, RepositoriesSortBy, RepositoriesList },
props: {
user: { type: String }
},
// inside our component
setup (props) {
// 之前的写法是需要写到data里面的,放到setup里面就把获取数据与保存数据放到一起了,
let repositories = []
const getUserRepositories = async () => {
repositories = await fetchUserRepositories(props.user)
} return {
repositories,
getUserRepositories // functions returned behave the same as methods
}
}
// the "rest" of the component
}

ref的作用 与 react hook中的useState很相似

// src/components/UserRepositories.vue `setup` function
import { fetchUserRepositories } from '@/api/repositories'
import { ref } from 'vue' // in our component
setup (props) {
// 注意 ref生成的返回值不是传入的参数,而是放到一个对象的value值里面了,比如下 const number = ref(0) ; 那么number应该是 number = {value: 0},这样做的理由是基本数据类型不支持引用传值
const repositories = ref([])
const getUserRepositories = async () => {
repositories.value = await fetchUserRepositories(props.user)
} return {
repositories,
getUserRepositories
}
}

几点注意事项:

  • setup(props, {...}) ; props不能用解构的方式获取里面的值,这样就丢失掉 props属性值的自动响应能力
  • 如果需要props的解构能力可以用 toRefs(props)来实现
  • 如果ref生成的值,在template中使用的时候不要用value属性,直接使用比如 const foo = ref(0); 在template中 <span>{{foo}}</span>不需要写foo.value

Vue3学习笔记的更多相关文章

  1. vue3 学习笔记 (二)——axios 的使用有变化吗?

    本篇文章主要目的就是想告诉我身边,正在学 vue3 或者 准备学 vue3 的同学,vue3中网络请求axios该如何使用,防止接触了一点点 vue3 的同学会有个疑问?生命周期.router .vu ...

  2. vue3 学习笔记 (四)——vue3 setup() 高级用法

    本篇文章干货较多,建议收藏! 从 vue2 升级到 vue3,vue3 是可以兼容 vue2 的,所以 vue3 可以采用 vue2 的选项式API.由于选项式API一个变量存在于多处,如果出现问题时 ...

  3. vue3 学习笔记(九)——script setup 语法糖用了才知道有多爽

    刚开始使用 script setup 语法糖的时候,编辑器会提示这是一个实验属性,要使用的话,需要固定 vue 版本. 在 6 月底,该提案被正式定稿,在 v3.1.3 的版本上,继续使用但仍会有实验 ...

  4. vue3 学习笔记 (五)——vue3 的 setup 如何实现响应式功能?

    setup 是用来写组合式 api ,内部的数据和方法需要通过 return 之后,模板才能使用.在之前 vue2 中,data 返回的数据,可以直接进行双向绑定使用,如果我们把 setup 中数据类 ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  7. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  8. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  9. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  10. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

随机推荐

  1. java开发环境搭建 (JDK卸载与安装、配置)

    一.window系统下java环境搭建 1.卸载JDK 查看安装目录:此电脑 -> 右键选择属性 -> 高级系统设置 -> 环境变量 -> 查看系统变量那一栏中的JAVA_HO ...

  2. Word15 财务部年度报告office真题

    1.课程的讲解之前,先来对题目进行分析,首先需要在考生文件夹下,将Wrod素材.docx文件另存为Word.docx,后续操作均基于此文件,否则不得分.   2.这一步非常的简单,打开下载素材文件,在 ...

  3. [JavaScript]内置对象Number初识

    学习:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number Number 类型 ...

  4. vue vite 打包开启 gzip 部署 nginx 支持 gzip

    vite 打包开启 gzip 安装插件 npm i vite-plugin-compression --save-dev vite.config.js 配置 import { defineConfig ...

  5. Centos 升级glibc 亲测好用

    wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz  tar zxf glibc-2.18.tar.gz cd glibc-2.18/ mkdir ...

  6. 使用stream流对数据进行处理

    1. 使用场景 本次使用是通过条件查询出所需要的多个字段后,对其进行处理(一个条件查询多个下拉框内容,并对每个下拉框内容封装对象,进行返回) 2. 代码 点击查看代码 //获取所有需要的数据 List ...

  7. HttpURLConnection.openConnection状态码302

    今天根据URL,下载视频. new URL(url1).openConnection() 的时候,用HttpURLConnection接,出现302,以至于后面取不到流,无法读流. HttpURLCo ...

  8. 01爬取豆瓣网电影数据进行numpy的练习

    level 2:10.案例:编写爬虫爬取豆瓣电影排行榜(电影名称,评分),保存为csv文件 a.用numpy加载csv数据 b.把评分列转换成float64类型 c.计算电影的平均评分 d.求评分最高 ...

  9. ENGG1310 P2.1 Intro to CE Computer Systems, Programming & Networking

    课程内容笔记,自用,不涉及任何 assignment,exam 答案 Notes for self-use, do not include any assignments or exams H/W & ...

  10. 【转载】C++标准库容器与C#容器对比

    转载自栈他喵的又溢出了 我简单的整理一下,方便观看: C#容器 C++容器 备注 Array C array .net的Array可以是非0起始索引(鸡肋?查了一下,用Array.CreateInst ...