为什么需要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

最新文章

  1. jQuery静态方法noop,camelCase,nodeName,trim使用和源码分析
  2. PHP常用框架
  3. ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var mysql 启动不了(转载)
  4. CSS Reset样式重置
  5. iOS中文API之NSLayoutconstraint
  6. postfix
  7. Windows XP与Windows 7系统常见漏洞
  8. Communications link failure报错的处理
  9. Debian8 加载NTFS 磁盘出错 解决方法
  10. web前端之 HTML介绍
  11. 利用matlab实现以下功能:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
  12. 常用Json
  13. js获取控件位置
  14. spring boot 之热部署(三)
  15. java中产生HttpServletRequest等作用域
  16. linux shell下16进制 “\uxxxx” unicode to UTF-8中文
  17. cisco常用命令详解
  18. UIKit&#160;框架之UIView一
  19. UVa 1220 Hali-Bula的晚会(树的最大独立集)
  20. pl/sql中误删表中数据并提交恢复办法

热门文章

  1. 在grafana中使用不同的数据源及插件安装
  2. 关于vscode 一些配置
  3. 统计tomcat的access日志
  4. Kubernetes 设置master相关
  5. dart 学习笔记
  6. DOM状态监听(观察者模式)
  7. python经典例题
  8. 关于certutil的探究-文件下载+编码分块上传上传文件再合并
  9. DFS略思维题做题记录
  10. CoreText学习笔记