当前位置:首页 > 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 是一个用于构建用户界面的 JavaScript 库。学习 React 的第一步是掌握其核心概念,包括组件、状态(State)、属性(Props)和生命周期方法…

react如何销毁

react如何销毁

销毁 React 组件 在 React 中,销毁组件通常涉及清理副作用(如事件监听器、定时器或订阅)以防止内存泄漏。以下是实现组件销毁的常见方法: 使用 useEffect 清理副作用 在函数…

react如何鉴定

react如何鉴定

React 鉴权方法 基于路由的鉴权 在 React 中,可以通过封装路由组件实现鉴权。使用 react-router-dom 检查用户是否登录,未登录则跳转至登录页。 import { Ro…

css日历制作

css日历制作

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

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app np…