真实公司项目和玩具 demo 不一样:有 TypeScript 类型、有全局状态管理、接口都被封装在 api 目录里。看懂这三样,你才能在大项目里定位代码、做小修改。
玩具项目你已经会了。真实项目会多出三样让新手发怵的东西:看着吓人的 TS 类型、到处传数据的状态管理、层层封装的接口调用。这阶段就是把这三个「拦路虎」变成「纸老虎」。
// 变量后面加 : 类型,就是在贴标签
let name: string = '张三'; // 文字
let age: number = 25; // 数字
let vip: boolean = true; // 是 / 否
// 函数:参数和返回值都能标类型
function add(a: number, b: number): number {
return a + b;
}
// interface = 一张「数据结构说明书」
interface User {
id: number;
name: string;
vip?: boolean; // 问号 = 这个字段可有可无
}
const u: User = { id: 1, name: '张三' };
: string、interface、<T> 别慌,它们只是「注释加强版」,帮你看清数据结构。看不懂的类型选中问 AI,秒懂。比如「当前登录用户」,导航栏要显示头像、订单页要用他的 id、设置页要改他的资料。如果每个页面各存一份,就会乱、会对不上。
// 定义一个「用户仓库」store
import { defineStore } from 'pinia';
export const useUserStore = defineStore('user', () => {
const name = ref(''); // 存的数据
function login(n) { name.value = n; } // 改数据的方法
return { name, login };
});
// 任意组件里用它
const userStore = useUserStore();
console.log(userStore.name); // 读
userStore.login('张三'); // 改,所有用到的地方自动更新
api/ 目录。看懂它,是读懂项目的关键。api/ 目录里,页面只管「翻通讯录打电话」,地址变了改一处就行。// api/user.ts —— 把接口封装成函数
import request from '@/utils/request'; // 项目统一封装的 axios
export function getUserList(params) {
return request({ url: '/user/list', method: 'get', params });
}
export function addUser(data) {
return request({ url: '/user', method: 'post', data });
}
// 页面里调用,干净利落
import { getUserList } from '@/api/user';
const res = await getUserList({ page: 1 });
getUserList → 去 api/ 目录找到它 → 看到它请求的 url: '/user/list' → 记住这个地址,第四阶段你就能拿它去后端找对应代码。这条线打通,你就理解全栈是怎么串起来的。@ 是路径别名,代表 src 目录。@/api/user 就是 src/api/user。el-table 显示数据,el-pagination 翻页,翻页时重新请求接口。el-dialog,一个变量 true/false 控制它开关。el-form + 规则,必填项没填就红字拦住,不让提交。| 插件 | 干嘛的 | 优先级 |
|---|---|---|
| ECharts | 画折线图 / 柱状图 / 饼图 | 用到再学 |
| 富文本编辑器 | 像 Word 一样编辑内容 | 用到再学 |
| 地图组件 | 展示位置、选点 | 用到再学 |
| 文件上传 / 导出 Excel | 上传图片、导报表 | 用到再学 |
在一个真实的中后台项目里,你能——
interface,知道数据长啥样api/ 里的接口 → 记下它的 url 地址