[TOC]
# Composition API
## 核心概念与用法
| 概念 | 作用 | 用法 |
| --------- | ------------------------ |------------------|
|setup | 组件选项,所有 Composition API 相关逻辑都在此使用|export default {<br> setup() { ... }<br>}|
|ref | 创建响应式数据 |const count = ref(0)|
|readonly | 创建只读的 ref |const readonlyCount = readonly(0)|
|computed |从其他响应式数据派生计算属性|const doubledCount = computed(() => count.value * 2)|
|watch | 观察响应式数据的变化 |watch(count, (newVal, oldVal) => { ... })|
|provide | 在祖先组件中提供响应式数据 |provide('count', count)|
|inject | 在子孙组件中注入祖先组件提供的数据 |const count = inject('count')|
|reactive | 将普通对象转为响应式对象|const state = reactive({ count: 0 })|
|toRefs | 创建指向响应式对象内部数据的 ref |const { count } = toRefs(state)|
|toRef | 为响应式对象的某个属性创建 ref |const count = toRef(state, 'count')|
|readonly | 为 ref 创建只读代理 |const readonlyCount = readonly(count)|
|isRef | 检查一个值是否为 ref 对象 |isRef(count) // true|
|isReactive| 检查一个对象是否是 reactive 创建的响应式 proxy|isReactive(state) // true|
|customRef | 创建自定义 ref |const count = customRef((track, trigger) => { ... })|
> ### 使用 Composition API 的过程:
1. 在组件中使用 setup 选项,所有 Composition API 相关逻辑在此处完成。
2. 导入需要的 API,如:
js
import { ref, computed, watch, provide, inject } from 'vue'
3. 在 setup 中使用这些 API 来构建组件逻辑,并 return 需要在模板中使用的响应式数据或方法。
4. 在模板中使用 setup 返回的值来渲染或绑定数据。
## 高级用法,可以构建出更加复杂和强大的组件
### 1\. ref
:可以创建可变的响应式数据,在渲染函数和生命周期钩子中使用。
~~~
js
import { ref } from 'vue'
setup() {
const count = ref(0)
// 读取 count 值
console.log(count.value)
// 设置 count 值
count.value++
}
~~~
### 2\. computed
:可以从其他响应式数据派生计算属性。
~~~
js
import { ref, computed } from 'vue'
setup() {
const count = ref(0)
const doubledCount = computed(() => count.value * 2)
console.log(doubledCount.value) // 0
count.value++
console.log(doubledCount.value) // 2
}
~~~
### 3\. watch
:可以观察响应式数据的变化。
~~~
js
import { ref, watch } from 'vue'
setup() {
const count = ref(0)
watch(count, (newVal, oldVal) => {
console.log(`${oldVal} -> ${newVal}`)
})
count.value++ // Logs "0 -> 1"
}
~~~
### 4\. provide / inject
:可以在祖先组件中提供响应式数据,然后在子孙组件中注入使用。
~~~
js
// 祖先组件
import { provide, ref } from 'vue'
setup() {
const count = ref(0)
provide('count', count)
}
// 子组件
import { inject } from 'vue'
setup() {
const count = inject('count')
console.log(count.value) // 从祖先组件获取的值
}
~~~
### 5\. 组合组件
:可以将多个 Composition API 的组合在一起,构建出强大的组件逻辑。
~~~
js
import { ref, computed, watch } from 'vue'
export default {
setup() {
const count = ref(0)
const doubledCount = computed(() => count.value * 2)
watch(count, (newVal) => { /* ... */ })
function increment() {
count.value++
}
return {
count,
doubledCount,
increment
}
}
}
~~~
- 系统设计
- 需求分析
- 概要设计
- 详细设计
- 逻辑模型设计
- 物理模型设计
- 产品设计
- 数据驱动产品设计
- 首页
- 逻辑理解
- 微服务架构的关系数据库优化
- Java基础架构
- 编程范式
- 面向对象编程【模拟现实】
- 泛型编程【参数化】
- 函数式编程
- 响应式编程【异步流】
- 并发编程【多线程】
- 面向切面编程【代码复用解耦】
- 声明式编程【注解和配置】
- 函数响应式编程
- 语法基础
- 包、接口、类、对象和切面案例代码
- Springboot按以下步骤面向切面设计程序
- 关键词
- 内部类、匿名类
- 数组、字符串、I/O
- 常用API
- 并发包
- XML
- Maven 包管理
- Pom.xml
- 技术框架
- SpringBoot
- 项目文件目录
- Vue
- Vue项目文件目录
- 远程组件
- 敏捷开发前端应用
- Pinia Store
- Vite
- Composition API
- uniapp
- 本地方法JNI
- 脚本机制
- 编译器API
- 注释
- 源码级注释
- Javadoc
- 安全
- Swing和图形化编程
- 国际化
- 精实或精益
- 精实软件数据库设计
- 精实的原理与方法
- 项目
- 零售软件
- 扩展
- 1001_docker 示例
- 1002_Docker 常用命令
- 1003_微服务
- 1004_微服务数据模型范式
- 1005_数据模型
- 1006_springCloud
- AI 流程图生成
- Wordpress_6
- Woocommerce_7
- WooCommerce常用的API和帮助函数
- WooCommerce的钩子和过滤器
- REST API
- 数据库API
- 模板系统
- 数据模型
- 1.Woo主题开发流程
- Filter
- Hook
- 可视编辑区域的函数工具
- 渲染字段函数
- 类库和框架
- TDD 通过测试来驱动开发
- 编程范式对WordPress开发
- WordPress和WooCommerce的核心代码类库组成
- 数据库修改
- 1.WP主题开发流程与时间规划
- moho
- Note 1
- 基础命令