开发示例
⚛️ React 应用开发
从零开始用 Trae 构建一个完整的 React 任务管理应用,体验 AI 辅助前端开发。
项目初始化
Terminal
# 用 Vite 创建 React + TypeScript 项目
npm create vite@latest task-app -- --template react-ts
cd task-app
npm install
# 在 Trae 中打开
trae .
也可以直接在 Builder 中说:"用 Vite + React + TypeScript 创建一个任务管理应用",Builder 会自动完成所有初始化步骤。
示例一:任务列表组件
TaskList.tsx — 完整任务管理
React + TypeScriptsrc/components/TaskList.tsx
import { useState } from 'react'
interface Task {
id: number
text: string
done: boolean
priority: 'low' | 'medium' | 'high'
}
const PRIORITY_COLOR = {
low: '#10b981',
medium: '#f59e0b',
high: '#ef4444',
}
export default function TaskList() {
const [tasks, setTasks] = useState<Task[]>([])
const [input, setInput] = useState('')
const [priority, setPriority] = useState<Task['priority']>('medium')
const [filter, setFilter] = useState<'all' | 'active' | 'done'>('all')
const addTask = () => {
if (!input.trim()) return
setTasks(prev => [...prev, {
id: Date.now(), text: input.trim(), done: false, priority
}])
setInput('')
}
const filtered = tasks.filter(t =>
filter === 'all' ? true : filter === 'done' ? t.done : !t.done
)
return (
<div className="task-app">
<h1>任务管理</h1>
<div className="add-row">
<input
value={input}
onChange={e => setInput(e.target.value)}
onKeyDown={e => e.key === 'Enter' && addTask()}
placeholder="添加新任务..."
/>
<select value={priority} onChange={e => setPriority(e.target.value as Task['priority'])}>
<option value="low">低优先级</option>
<option value="medium">中优先级</option>
<option value="high">高优先级</option>
</select>
<button onClick={addTask}>添加</button>
</div>
<div className="filters">
{(['all', 'active', 'done'] as const).map(f => (
<button key={f} className={filter === f ? 'active' : ''}
onClick={() => setFilter(f)}>
{{ all: '全部', active: '进行中', done: '已完成' }[f]}
</button>
))}
</div>
<ul>
{filtered.map(task => (
<li key={task.id} className={task.done ? 'done' : ''}>
<span className="dot"
style={{ background: PRIORITY_COLOR[task.priority] }} />
<span onClick={() => setTasks(prev =>
prev.map(t => t.id === task.id ? {...t, done: !t.done} : t)
)}>{task.text}</span>
<button onClick={() => setTasks(prev => prev.filter(t => t.id !== task.id))}>
✕
</button>
</li>
))}
</ul>
<p className="stats">
{tasks.filter(t => !t.done).length} 项待完成 / 共 {tasks.length} 项
</p>
</div>
)
}
示例二:自定义 Hook
src/hooks/useFetch.ts
import { useState, useEffect } from 'react'
interface FetchState<T> {
data: T | null
loading: boolean
error: string | null
}
export function useFetch<T>(url: string): FetchState<T> {
const [state, setState] = useState<FetchState<T>>({
data: null, loading: true, error: null
})
useEffect(() => {
let cancelled = false
setState(s => ({ ...s, loading: true, error: null }))
fetch(url)
.then(r => { if (!r.ok) throw new Error(r.statusText); return r.json() })
.then(data => { if (!cancelled) setState({ data, loading: false, error: null }) })
.catch(err => { if (!cancelled) setState({ data: null, loading: false, error: err.message }) })
return () => { cancelled = true }
}, [url])
return state
}
// 使用示例
function UserProfile({ id }: { id: number }) {
const { data, loading, error } = useFetch<User>(`/api/users/${id}`)
if (loading) return <div>加载中...</div>
if (error) return <div>错误: {error}</div>
return <div>{data?.name}</div>
}
AI 辅助技巧
实用 Chat 提示词
# 生成组件
创建一个 React 分页组件,Props: total, page, pageSize, onChange
使用 TypeScript,Tailwind CSS 样式
# 优化性能
@src/components/TaskList.tsx 这个组件有哪些性能问题?
用 useMemo 和 useCallback 优化
# 添加动画
给任务列表添加进入/退出动画,使用 CSS transition
遇到 React 报错时,直接把错误信息粘贴到 Chat,AI 通常能立即定位问题所在。