当前位置:首页 > React

react实现考勤表

2026-01-27 10:26:07React

React 实现考勤表

数据结构设计

考勤表通常需要记录员工、日期和考勤状态。可以使用以下数据结构:

const attendanceData = [
  {
    id: 1,
    name: "张三",
    records: [
      { date: "2023-10-01", status: "present" },
      { date: "2023-10-02", status: "absent" }
    ]
  }
];

组件结构

创建三个主要组件:

  • AttendanceTable:主表格组件
  • EmployeeRow:处理单行员工数据
  • StatusCell:渲染单个考勤状态单元格
function AttendanceTable({ data }) {
  return (
    <table>
      <thead>
        <tr>
          <th>姓名</th>
          <th>日期1</th>
          <th>日期2</th>
        </tr>
      </thead>
      <tbody>
        {data.map(employee => (
          <EmployeeRow key={employee.id} employee={employee} />
        ))}
      </tbody>
    </table>
  );
}

状态管理

使用React状态管理考勤数据:

const [attendance, setAttendance] = useState(initialData);

const updateStatus = (employeeId, date, newStatus) => {
  setAttendance(prev => prev.map(emp => {
    if(emp.id === employeeId) {
      return {
        ...emp,
        records: emp.records.map(rec => 
          rec.date === date ? {...rec, status: newStatus} : rec
        )
      };
    }
    return emp;
  }));
};

可视化呈现

为不同状态添加样式:

.present { background-color: #a3e635; }
.absent { background-color: #f87171; }
.leave { background-color: #60a5fa; }

完整示例

function StatusCell({ status, onUpdate }) {
  const colors = {
    present: 'bg-green-300',
    absent: 'bg-red-300',
    leave: 'bg-blue-300'
  };

  return (
    <td 
      className={`p-2 ${colors[status]}`}
      onClick={onUpdate}
    >
      {status}
    </td>
  );
}

function AttendanceApp() {
  const [data, setData] = useState(attendanceData);

  const handleStatusChange = (employeeId, date) => {
    const statusOptions = ['present', 'absent', 'leave'];
    const employee = data.find(e => e.id === employeeId);
    const currentIndex = statusOptions.indexOf(
      employee.records.find(r => r.date === date).status
    );
    const nextStatus = statusOptions[(currentIndex + 1) % statusOptions.length];

    setData(prev => prev.map(emp => {
      if(emp.id === employeeId) {
        return {
          ...emp,
          records: emp.records.map(rec => 
            rec.date === date ? {...rec, status: nextStatus} : rec
          )
        };
      }
      return emp;
    }));
  };

  return (
    <div className="p-4">
      <AttendanceTable 
        data={data} 
        onStatusChange={handleStatusChange}
      />
    </div>
  );
}

扩展功能

  • 添加日期选择器动态生成表头
  • 实现数据持久化(localStorage或API)
  • 添加统计功能计算出勤率
  • 支持批量操作和导出功能

这个实现提供了基础考勤表功能,可根据实际需求进一步扩展和完善。

react实现考勤表

标签: 考勤表react
分享给朋友:

相关文章

react native如何启动

react native如何启动

React Native 启动步骤 确保已安装 Node.js(建议版本 14 或更高)和 npm/yarn。安装完成后,通过命令行工具执行以下操作。 初始化新项目 使用 React Native…

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通常…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

react如何衰减

react如何衰减

React 中的动画衰减效果实现 在 React 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyfra…

react如何查

react如何查

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

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…