当前位置:首页 > React

react课程表实现

2026-01-27 16:19:08React

实现React课程表的基本步骤

创建课程表需要设计数据结构、渲染UI以及处理交互逻辑。以下是一个基于React的实现方案:

数据结构设计 使用数组存储课程信息,每个课程包含名称、时间、地点等属性:

const courses = [
  { id: 1, name: '数学', time: '周一 8:00-10:00', location: 'A101' },
  { id: 2, name: '物理', time: '周三 14:00-16:00', location: 'B203' }
];

组件结构

  • Timetable:主容器组件
  • CourseCard:单个课程展示组件
  • WeekView:周视图布局组件

核心代码实现

课程卡片组件

function CourseCard({ course }) {
  return (
    <div className="course-card">
      <h3>{course.name}</h3>
      <p>{course.time}</p>
      <p>{course.location}</p>
    </div>
  );
}

周视图布局

function WeekView({ courses }) {
  const days = ['周一', '周二', '周三', '周四', '周五'];

  return (
    <div className="week-grid">
      {days.map(day => (
        <div key={day} className="day-column">
          <h4>{day}</h4>
          {courses
            .filter(course => course.time.includes(day))
            .map(course => <CourseCard key={course.id} course={course} />)
          }
        </div>
      ))}
    </div>
  );
}

样式处理方案

使用CSS Grid实现响应式布局:

.week-grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 1rem;
}

.day-column {
  border: 1px solid #ddd;
  padding: 0.5rem;
}

.course-card {
  background: #f5f5f5;
  margin-bottom: 0.5rem;
  padding: 0.5rem;
  border-radius: 4px;
}

交互功能扩展

添加课程功能

function AddCourseForm({ onAdd }) {
  const [name, setName] = useState('');

  const handleSubmit = (e) => {
    e.preventDefault();
    onAdd({ name, time: '待定', location: '待定' });
    setName('');
  };

  return (
    <form onSubmit={handleSubmit}>
      <input 
        value={name}
        onChange={(e) => setName(e.target.value)}
        placeholder="课程名称"
      />
      <button type="submit">添加课程</button>
    </form>
  );
}

状态管理方案

使用React Context管理全局状态:

const TimetableContext = createContext();

function TimetableProvider({ children }) {
  const [courses, setCourses] = useState(initialCourses);

  const addCourse = (newCourse) => {
    setCourses([...courses, { ...newCourse, id: Date.now() }]);
  };

  return (
    <TimetableContext.Provider value={{ courses, addCourse }}>
      {children}
    </TimetableContext.Provider>
  );
}

完整示例整合

将各组件组合成完整应用:

react课程表实现

function App() {
  return (
    <TimetableProvider>
      <div className="app">
        <AddCourseForm />
        <WeekView />
      </div>
    </TimetableProvider>
  );
}

进阶优化方向

  1. 持久化存储:结合localStorage或数据库保存课程数据
  2. 拖拽调整:实现课程时间拖拽调整功能
  3. 多视图切换:支持日/周/月不同视图模式
  4. 冲突检测:添加课程时间冲突验证逻辑
  5. 主题定制:支持自定义颜色主题和布局样式

以上实现方案可根据具体需求进行调整和扩展,核心在于合理设计数据结构和组件层次关系。

标签: 课程表react
分享给朋友:

相关文章

react 如何获取dom

react 如何获取dom

获取 DOM 的方法 在 React 中,可以通过 useRef 或 createRef 来获取 DOM 节点。useRef 是函数组件中常用的方法,而 createRef 通常用于类组件。 使用…

如何搭建react项目

如何搭建react项目

使用 Create React App 搭建项目 Create React App (CRA) 是官方推荐的快速搭建 React 项目的工具,无需配置构建工具(如 Webpack 或 Babel)。…

react如何重写alert

react如何重写alert

重写 React 中的 alert 方法 在 React 中,直接使用原生 alert 会破坏用户体验,通常需要自定义弹窗组件替代。以下是实现方法: 使用自定义弹窗组件 创建可复用的弹窗组件,替代原…

react如何减少伤害

react如何减少伤害

减少 React 应用性能伤害的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行浅比较,避免不必要的重新渲染。类组件可以使用 PureC…

react如何引用jquery

react如何引用jquery

在React项目中引用jQuery可以通过以下方法实现: 安装jQuery依赖 通过npm或yarn安装jQuery包: npm install jquery # 或 yarn add jquer…

如何外部访问react

如何外部访问react

外部访问 React 应用的方法 配置代理服务器 在开发环境中,可以通过配置代理服务器解决跨域问题。修改 package.json 文件,添加 proxy 字段指向后端 API 地址: "proxy…