首页 › Vibe coding 项目实战专栏 › 第 1 章:什么是 Vibe Coding? › 第 7 章:实战项目 2 - 天气查询 Web 应用 (Vibe Weather)

第 7 章:实战项目 2 - 天气查询 Web 应用 (Vibe Weather)

​

🪢

🎯 本章目标:从"玩具"迈向"工具"​

我们将构建一个实时连接外部世界(API)的应用​

核心技能:API 集成、异步状态管理、复杂错误处理(Error Handling)、环境变量配置。​

​

​

​

​

​

​

飞书文档 - 图片

​

33%

​

​

​

飞书文档 - 图片

​

33%

​

​

​

飞书文档 - 图片

​

33%

​

​

7.1 项目规划与准备​

这次我们不仅要好看,还要"真实"。​

需求概览​

搜索:输入城市名,查询天气。​

展示:显示温度、湿度、风速和天气图标。​

预测:显示未来 5 天的天气预报。​

动态:根据天气状况(晴/雨/雪)自动切换背景动态效果。​

准备工作:获取 API Key​

本项目使用 OpenWeatherMap (免费且稳定)。​

访问 openweather官网 注册账号。​

在 API Keys 页面生成一个 Key。注意:新生成的 Key 可能需要 10-20 分钟才能生效。​

记下这个 Key,等会要用。​

初始化项目​

打开 Cursor 终端,运行:​

​

代码块​

Plain Text

npm create vite@latest vibe-weather -- --template react-ts​

cd vibe-weather​

npm install​

code . # 用 Cursor 打开新文件夹​

​

​

飞书文档 - 图片

​

7.2 API 集成:从"后端"开始​

在 Vibe Coding 中,处理 API 的最佳策略是 "先定义数据,再写 UI"。​

步骤 1:配置环境变量​

首先,告诉 AI 我们要安全地存储 Key。​

​

​

步骤 2:封装 API 服务​

不要把 fetch 逻辑散落在组件里。让我们用 CRCO 框架封装一个服务层。​

​

代码块​

Markdown

[Context]​

项目使用 TypeScript。我有了 OpenWeatherMap 的 API Key。​

API 文档(简述):​

- 当前天气: /data/2.5/weather?q={city}&appid={key}​

- 5天预报: /data/2.5/forecast?q={city}&appid={key}​

​

[Requirement]​

请创建 `src/services/weather.ts` 文件。​

1. 导出一个 `getWeather(city: string)` 函数。​

2. 导出一个 `getForecast(city: string)` 函数。​

3. 使用 axios 或 fetch 获取数据。​

​

[Constraints]​

- 为 API 返回的数据定义清晰的 TypeScript Interface。​

- **参数优化**:请求 URL 请带上 `&units=metric` 参数,直接获取摄氏度数据,无需手动转换。​

- **语言设置**:请求 URL 带上 `&lang=zh_cn`,获取中文天气描述。​

- 如果 API 报错(如 404 City Not Found),请抛出带有具体信息的 Error。​

​

7.3 前后端分离的提示词策略​

现在后端逻辑(Service 层)有了,我们来写前端。这次我们尝试 "数据驱动 UI " 的提示词策略。​

步骤 3:构建 UI 骨架​

把刚才生成的 weather.ts 里的 Interface 复制一下,丢给 AI。​

​

代码块​

Plain Text

[Context]​

参考以下数据结构(从 weather.ts 复制而来):​

```typescript​

interface WeatherData {​

temp: number;​

humidity: number;​

condition: 'Clear' | 'Rain' | 'Clouds';​

...​

}​

​

[Requirement] 请构建一个 WeatherCard 组件来展示上述数据。​

顶部显示巨大的温度数字。​

底部网格展示湿度、风速等详情。​

根据 condition 字段,显示对应的 Lucide React 图标(比如 Sun, CloudRain)。​

[Vibe] 设计风格参考 iOS 天气应用,半透明磨砂玻璃质感。​

​

代码块​

YAML

​

---​

​

## 7.4 错误处理与边界情况 (Robustness)​

​

一个好的应用不仅要能跑,还要经得起"造"。​

​

### 步骤 4:处理 Loading 和 Error​

不要让用户看白屏。​

​

```markdown​

[Context]​

目前的 `App.tsx` 在请求数据时没有反馈。​

​

[Requirement]​

请优化用户体验:​

​

7.5 UI 美化:根据天气切换背景​

这是体现 Vibe 的高光时刻。​

步骤 5:动态背景​

​

代码块​

Plain Text

[Requirement]​

我希望背景能随天气变化。​

请创建一个 `BackgroundWrapper` 组件。​

1. 接收 `weatherCondition` 作为 props。​

2. 如果是 'Clear',背景显示阳光明媚的渐变色。​

3. 如果是 'Rain',背景变为深蓝色调。​

4. 无论切换成什么,都要有 CSS transition 平滑过渡效果,不要生硬跳变。​

​

📝 本章小结​

通过本章,通过本项目,你掌握了现代前端开发的三个核心范式:​

Service Layer 模式:将脏活累活(API 请求、数据转换)封装在独立文件。​

TypeScript 契约:先定义 Interface,让 AI 严格按照数据结构生成 UI。​

状态机思维:始终考虑 Idle / Loading / Success / Error 四种状态。​

这不仅仅是 Vibe Coding,这是专业级的工程思维。​