用中型项目的方式开发一个React待办清单应用
项目架构设计
1. 技术选型
- React + Vite构建工具
- useReducer + useContext状态管理
- Stylus预处理CSS
- localStorage数据持久化
2. 目录结构
src/
├── components/ // 展示组件
├── reducers/ // 状态处理逻辑
├── hook/ // 自定义Hook
├── context/ // 上下文管理
└── styles/ // 全局样式
核心实现
1. 状态管理架构
// 使用useReducer管理复杂状态
const [todos, dispatch] = useReducer(todoReducer, initialState);
// 通过Context跨组件共享状态
<TodoContext.Provider value={stateAndActions}>
{/* 子组件 */}
</TodoContext.Provider>
2. 自定义Hook封装
// useTodos.js
export function useTodos() {
const [todos, dispatch] = useReducer(todoReducer, getInitialTodos());
useEffect(() => {
// 自动持久化到localStorage
localStorage.setItem('todos', JSON.stringify(todos));
}, [todos]);
return {
todos,
addTodo: (text) => dispatch({type: "ADD_TODO", text}),
// 其他actions...
};
}
3. 组件设计原则
- 容器组件:App.jsx负责状态管理和上下文提供
- 展示组件:AddTodo、TodoList等只负责UI渲染
- 关注点分离:业务逻辑与UI解耦
工程化实践
1. 样式管理
// 使用BEM命名规范
.todo-app
&__title
// 标题样式
.todo-form
&__input
// 输入框样式
2. 性能优化
- React.memo优化组件渲染
- useCallback缓存回调函数
- 按需导入组件
3. 开发体验
- 配置ESLint + Prettier
- 添加HMR热更新
- 错误边界处理
扩展性设计
1. 中间件支持
// 可添加日志、异常监控等中间件
const enhancedReducer = applyMiddleware(
logger,
crashReporter
)(todoReducer);
2. 测试策略
- Jest单元测试
- React Testing Library组件测试
- Cypress端到端测试
项目总结
通过这个项目我们实践了:
- 可维护的项目结构组织
- 专业的状态管理方案
- 组件化开发思想
- 工程化最佳实践
- 扩展性设计考虑
这种架构适合中小型项目开发,既能保证代码质量,又不会引入过度设计。