Vue3 组合式 API 与组合式函数:中后台人员列表页开发实战,从逻辑拆分思路到落地实操,避开页面逻辑臃肿、复用性差的高频坑!
一、先忘掉已知编码'模式',想一个真实问题
假设现在要写一个人员列表页:
- 上面有搜索框(姓名、账号、手机号)
- 中间一个表格(数据 + 分页)
- 每一行有:编辑、分配角色、改密码、删除
- 点编辑/改密码/分配角色会弹出对话框
如果全写在一个 .vue 文件里,会怎样?
<template>还好,主要是布局<script>里会堆满:搜索表单数据、表格数据、分页、好几个弹窗的显示/隐藏、每个按钮的点击函数、每个弹窗的确认/关闭……
一个文件动不动就 500 行、几十个变量和函数,改一处要翻半天,也不好复用。
所以我们要解决的是两件事:
- 把'逻辑'从'页面'里拆出来,让页面只负责'长什么样、点哪里'
- 拆出来的逻辑要能复用,比如别的页面也要'列表 + 分页 + 弹窗'时可以直接用
这种「逻辑从页面里抽出去、按功能组织、可复用」的写法,在 Vue 3 里就对应两样东西:
- 组合式 API:用
ref、reactive、onMounted等写逻辑的方式 - 组合式函数(Composables) - 音标:/kəm'pəuzəblz/:把一段逻辑封装成一个'以
use开头的函数',在页面里调一下就能用
下面分步讲。
二、第一步:认识'组合式 API'(在页面里写逻辑)
以前 Vue 2 常见的是「选项式 API」:一个组件里分好几块 —— data、methods、mounted 等,逻辑按'类型'分,而不是按'功能'分。
Vue 3 的组合式 API 换了一种思路:在 setup(或 <script setup>)里,像写普通 JS 一样,用变量和函数把'和某块功能相关的所有东西'写在一起。
例如'搜索'这一块功能,可以这样写在一起:
// 和'搜索'相关的都放一起
const searchForm = reactive({
userName: '',
userAccount: ''
})
const handleSearch = () => {/* 调用接口、刷新列表 */}
const = () => {
searchForm. = ; ...
}


