用中型项目的方式开发一个React待办清单应用

92 阅读1分钟

用中型项目的方式开发一个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端到端测试

项目总结

通过这个项目我们实践了:

  1. 可维护的项目结构组织
  2. 专业的状态管理方案
  3. 组件化开发思想
  4. 工程化最佳实践
  5. 扩展性设计考虑

这种架构适合中小型项目开发,既能保证代码质量,又不会引入过度设计。