当前位置:首页 > 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;
  }));
};

可视化呈现

为不同状态添加样式:

react实现考勤表

.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如何浮动

使用 CSS 实现浮动 在 React 中实现浮动效果可以通过 CSS 的 float 属性完成。在组件的样式文件或内联样式中直接设置 float: left 或 float: right。…

如何开发react

如何开发react

开发React应用的基本步骤 安装Node.js和npm 确保系统中已安装Node.js(包含npm)。可通过官网下载安装包,安装后验证版本: node -v npm -v 创建React项目…

react如何打包

react如何打包

打包 React 项目的基本步骤 React 项目通常使用 create-react-app 或类似的脚手架工具创建,这些工具内置了打包功能。以下是打包 React 项目的详细方法: 安装依赖并构建…

react如何debugger

react如何debugger

调试 React 应用的方法 使用浏览器开发者工具进行调试 React 开发者工具(React DevTools)是调试 React 应用的必备工具。安装 Chrome 或 Firefox 扩展后,可…

react 如何操作cookie

react 如何操作cookie

安装依赖 在React项目中操作cookie通常需要第三方库的支持,推荐使用js-cookie。通过npm或yarn安装: npm install js-cookie # 或 yarn add js…

如何读react源码

如何读react源码

理解React源码的结构 React源码托管在GitHub上,主要分为几个核心模块:react、react-dom、react-reconciler等。react包包含核心API和组件逻辑,react…