当前位置:首页 > React

react实现日历

2026-01-26 15:55:50React

使用 React 实现日历

日历组件在 Web 应用中常用于日期选择、事件展示等场景。以下是几种实现日历的常见方法:

使用第三方库(如 react-calendar

安装 react-calendar 库:

npm install react-calendar

基本使用示例:

import React, { useState } from 'react';
import Calendar from 'react-calendar';
import 'react-calendar/dist/Calendar.css';

function App() {
  const [date, setDate] = useState(new Date());

  return (
    <div>
      <Calendar onChange={setDate} value={date} />
    </div>
  );
}

export default App;

该库提供丰富的功能,如日期范围选择、自定义样式和国际化支持。

手动实现简单日历

如果需要完全自定义的日历,可以手动实现:

import React, { useState } from 'react';

function Calendar() {
  const [currentDate, setCurrentDate] = useState(new Date());

  const year = currentDate.getFullYear();
  const month = currentDate.getMonth();

  const firstDay = new Date(year, month, 1).getDay();
  const daysInMonth = new Date(year, month + 1, 0).getDate();

  const renderDays = () => {
    const days = [];

    // 空白格子(上月)
    for (let i = 0; i < firstDay; i++) {
      days.push(<div key={`empty-${i}`} className="empty-day"></div>);
    }

    // 当月日期
    for (let day = 1; day <= daysInMonth; day++) {
      days.push(
        <div key={day} className="day" onClick={() => console.log(day)}>
          {day}
        </div>
      );
    }

    return days;
  };

  return (
    <div className="calendar">
      <div className="header">
        <button onClick={() => setCurrentDate(new Date(year, month - 1, 1))}>
          Prev
        </button>
        <h2>{`${year}年 ${month + 1}月`}</h2>
        <button onClick={() => setCurrentDate(new Date(year, month + 1, 1))}>
          Next
        </button>
      </div>
      <div className="weekdays">
        {['日', '一', '二', '三', '四', '五', '六'].map(day => (
          <div key={day}>{day}</div>
        ))}
      </div>
      <div className="days-grid">{renderDays()}</div>
    </div>
  );
}

export default Calendar;

添加样式

基本 CSS 样式示例:

.calendar {
  width: 300px;
  border: 1px solid #ddd;
  font-family: Arial;
}

.header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px;
  background: #f5f5f5;
}

.weekdays {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  text-align: center;
  background: #eee;
}

.days-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 5px;
  padding: 5px;
}

.day, .empty-day {
  height: 30px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.day:hover {
  background: #e0e0e0;
  cursor: pointer;
}

高级功能扩展

  1. 日期选择:添加状态管理记录选中的日期
  2. 事件标记:在特定日期显示标记点
  3. 范围选择:支持选择日期范围
  4. 国际化:支持不同语言和周起始日
  5. 主题定制:通过 CSS 变量或 styled-components 实现主题切换

对于复杂需求,建议使用成熟的日历库如:

react实现日历

  • react-big-calendar(适合日程安排)
  • @fullcalendar/react(功能全面)
  • react-datepicker(专注日期选择)

标签: 日历react
分享给朋友:

相关文章

react 如何跳转

react 如何跳转

使用 React Router 进行页面跳转 React 应用中通常使用 react-router-dom 库实现页面跳转。以下是几种常见的跳转方式: 安装依赖 npm install react…

如何关闭react

如何关闭react

关闭React应用的步骤 在开发或运行React应用时,可能需要关闭正在运行的开发服务器或停止应用。以下是几种常见情况的处理方法: 停止开发服务器 如果正在使用npm start或yarn star…

react native如何

react native如何

React Native 基础知识 React Native 是一个由 Facebook 开发的框架,用于使用 JavaScript 和 React 构建跨平台移动应用。它允许开发者编写一次代码,同时…

react 如何算精通

react 如何算精通

精通 React 的标准 精通 React 不仅需要掌握基础语法和核心概念,还需具备解决复杂问题、优化性能和架构设计的能力。以下是衡量 React 精通程度的关键维度: 核心概念与机制 组件…

react如何提交表单

react如何提交表单

表单提交的基本方法 在React中提交表单通常通过控制组件状态和事件处理实现。表单数据通过onSubmit事件捕获,并阻止默认提交行为以避免页面刷新。 import { useState } fro…

react 如何传递props

react 如何传递props

传递 props 的基本方法 在 React 中,props 是从父组件向子组件传递数据的主要方式。通过在子组件的标签上添加属性,可以将数据传递给子组件。 父组件中传递 props: functi…