当前位置:首页 > 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-big-calendar(适合日程安排)
  • @fullcalendar/react(功能全面)
  • react-datepicker(专注日期选择)

react实现日历

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

相关文章

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 进行组件记忆 React.memo 是一个高阶组件,用于缓存函数组件的渲染结果,避免不必要的重新渲染。只有当组件的 props 发生变化时,才…

css日历制作

css日历制作

基础日历结构 使用HTML创建日历的基本框架,通常包含表格元素。月份、星期几和日期通过<table>标签组织,表头显示星期几,表格主体填充日期数字。 <div class="ca…

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…