Derek-Callan-business-english: 用现代前端技术打造高效商务英语学习平台
前言
大家好,许久不见!这次为大家带来一个新项目,希望能和大家一起学习、共同进步。如果觉得项目不错,欢迎在 GitHub 上点个 Star ⭐,这对我而言是莫大的鼓励和支持。后续会根据需求情况,再考虑开放更多服务功能。
项目简介
Derek-Callan-business-english 是一个基于现代前端技术栈构建的商务英语词汇学习应用。该项目旨在帮助用户系统地学习商务场景中常用的英语词汇、短语和表达方式,通过科学的学习方法提升商务英语沟通能力。

技术栈
前端框架
- React 18: 采用最新的 React 版本,利用其并发特性和改进的性能
- TypeScript: 提供完整的类型安全,减少运行时错误,提升代码可维护性
- Vite 6: 极速的开发服务器和构建工具,显著提升开发体验
路由与状态管理
- React Router DOM 6: 声明式路由管理,支持嵌套路由和懒加载
- React Context: 轻量级全局状态管理,避免过度工程化
样式方案
- Tailwind CSS 3: 实用优先的 CSS 框架,快速构建响应式界面
- PostCSS + Autoprefixer: 自动处理 CSS 兼容性问题
图标库
- Lucide React: 轻量级、美观的图标库,提供丰富的图标选择
核心功能
1. 课程浏览与学习
应用提供结构化的课程内容,每个课程包含多个词汇项目。用户可以:
- 浏览所有可用课程
- 查看词汇的定义、例句
- 标记课程完成状态
2. 智能测验系统
测验模块支持多种题型:
- 定义匹配: 根据单词选择正确释义
- 单词匹配: 根据释义选择正确单词
- 判断题: 判断单词与释义是否匹配
测验系统会自动记录错题,并将其加入复习队列。
3. 间隔重复复习
这是应用最核心的特性之一,基于艾宾浩斯遗忘曲线原理:
- 自动安排复习时间
- 根据用户反馈调整复习间隔
- 支持三种掌握程度评估:不知道、模糊、已掌握
4. 学习进度追踪
用户可以查看:
- 已完成课程数量
- 总词汇量
- 测验历史记录
- 复习队列统计
项目架构
Derek-Callan-business-english/
├── src/
│ ├── components/ # 可复用 UI 组件
│ │ ├── Layout.tsx # 主布局包装器
│ │ ├── Navbar.tsx # 导航栏
│ │ ├── ProgressBar.tsx # 进度指示器
│ │ └── ...
│ ├── contexts/
│ │ └── AppContext.tsx # 全局状态管理
│ ├── data/
│ │ └── lessons.ts # 课程内容数据
│ ├── pages/ # 页面组件
│ ├── utils/ # 工具函数
│ ├── App.tsx # 根组件
│ └── main.tsx # 入口文件
└── ...
关键技术实现
1. 间隔重复算法
typescript
export function scheduleReview(itemId: string, quality: Quality): void {
const data = getReviewData()
const item = data[itemId] ?? {
nextReview: new Date().toISOString(),
interval: 0,
easeFactor: 2.5,
repetitions: 0,
lastReview: '',
}
if (quality === 0) {
item.repetitions = 0
item.interval = 1
} else if (quality === 1) {
item.interval = Math.max(1, Math.floor(item.interval * 0.5))
} else {
if (item.repetitions === 0) {
item.interval = 1
} else if (item.repetitions === 1) {
item.interval = 3
} else {
item.interval = Math.round(item.interval * item.easeFactor)
}
item.repetitions += 1
}
// 调整难度因子
item.easeFactor = Math.max(
1.3,
item.easeFactor + (0.1 - (2 - quality) * (0.08 + (2 - quality) * 0.02))
)
const nextDate = new Date()
nextDate.setDate(nextDate.getDate() + item.interval)
item.nextReview = nextDate.toISOString()
item.lastReview = new Date().toISOString()
setReviewItem(itemId, item)
}
该算法实现了经典的 SM-2 间隔重复算法,根据用户对词汇的掌握程度动态调整复习间隔。
2. 懒加载优化
typescript
const Dashboard = lazy(() => import('./pages/Dashboard'))
const LessonDetail = lazy(() => import('./pages/LessonDetail'))
const Quiz = lazy(() => import('./pages/Quiz'))
使用 React 的 lazy 和 Suspense 实现代码分割,按需加载页面组件,优化首屏加载时间。
3. 响应式导航
typescript
export default function Navbar() {
const [mobileOpen, setMobileOpen] = useState(false)
return (
<nav className="bg-blue-600 text-white shadow-lg">
{/* 桌面端导航 */}
<div className="hidden md:flex items-center gap-1">
{navItems.map(({ to, label, icon: Icon }) => (
<NavLink key={to} to={to} ...>
<Icon className="w-4 h-4" />
{label}
</NavLink>
))}
</div>
{/* 移动端菜单按钮 */}
<button className="md:hidden ..." onClick={() => setMobileOpen(!mobileOpen)}>
{mobileOpen ? <X /> : <Menu />}
</button>
{/* 移动端导航菜单 */}
{mobileOpen && (
<div className="md:hidden ...">
{/* 移动端导航项 */}
</div>
)}
</nav>
)
}
导航组件支持桌面端和移动端自适应,提供良好的用户体验。
数据结构设计
词汇项目
typescript
export interface VocabularyItem {
id: string
word: string
definition: string
examples: string[]
}
课程结构
typescript
export interface Lesson {
id: number
title: string
sections: Section[]
}
复习数据
typescript
export interface ReviewItem {
nextReview: string // 下次复习时间
interval: number // 复习间隔(天)
easeFactor: number // 难度因子
repetitions: number // 重复次数
lastReview: string // 上次复习时间
}
开发与部署
环境要求
- Node.js v16+
- npm
快速开始
bash
# 安装依赖
npm install
# 启动开发服务器
npm run dev
# 构建生产版本
npm run build
# 预览生产版本
npm run preview
总结
Derek-Callan-business-english 展示了如何使用现代前端技术构建一个功能完善的学习应用。项目特点包括:
- 清晰的架构: 组件化设计,职责分离明确
- 科学的学习方法: 间隔重复算法提升记忆效率
- 良好的用户体验: 响应式设计,流畅的交互
- 类型安全: TypeScript 提供完整的类型检查
- 性能优化: 代码分割和懒加载
该项目不仅是一个实用的学习工具,也是学习现代前端开发的良好示例。无论是想要提升商务英语水平的学习者,还是想要学习前端开发的开发者,都能从中获益。
项目基于 Derek Callan 的商务英语课程内容构建,所有词汇和例句均来自实际商务场景。资料整理不易,请多多支持!!