当前位置:首页 > 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如何查

react如何查

React 查询方法 React 提供了多种查询 DOM 元素的方式,以下是几种常见的方法: 使用 ref 通过 useRef 钩子可以获取 DOM 节点的引用,适用于直接操作 DOM 的场景。…

react如何验证

react如何验证

表单验证方法 在React中验证表单数据通常使用以下几种方式: 内置HTML5验证 利用HTML5原生表单验证属性如required、pattern等,结合form.noValidate属性禁用浏览…

react如何diff

react如何diff

React Diff 算法原理 React 的 Diff 算法是 Virtual DOM 的核心部分,用于高效更新真实 DOM。其核心思想是通过对比新旧 Virtual DOM 树的差异,最小化 DO…

如何同步react

如何同步react

同步React组件状态的方法 使用useState和useEffect钩子组合可以同步React组件的状态。useState用于声明状态变量,useEffect用于监听状态变化并执行副作用。 imp…

react如何通信

react如何通信

React 组件通信方式 React 组件间的通信方式多样,具体选择取决于组件关系和场景需求。以下是常见方法: 父子组件通信 父组件通过 props 向子组件传递数据,子组件通过回调函数通知父组件…

react如何配置

react如何配置

配置React项目的基本步骤 安装Node.js和npm 确保系统已安装Node.js(包含npm)。可通过命令行检查版本: node -v npm -v 创建React项目 使用官方工具Creat…