npm 包 ts-react-infinite-calendar 使用教程

阅读时长 24 分钟读完

简介

ts-react-infinite-calendar 是一个基于 TypeScript 的 React 日历组件库,支持各种日历视图,并且具有无限滚动功能。本文旨在介绍 ts-react-infinite-calendar 的基本使用方法以及一些不同场景的配置技巧和注意事项,帮助读者更好地理解和使用该库。

安装

使用 npm 可以非常方便地安装 ts-react-infinite-calendar:

基本用法

使用 ts-react-infinite-calendar 需要经过几个步骤:

  1. 引入依赖:在组件中引入 ts-react-infinite-calendar 的依赖。
  1. 创建实例:创建一个 Calendar 组件实例,并设置相关属性。
-- -------------------- ---- -------
---
-------- -
  ----- ----- - --- -------
  ----- -------- - --- ------------------------- ----------------- --------------- - ---
  ------ -
    ---------
      ----------------
      ----------------- ---
      ------------------
      ------------ ------------------------- ---------------- - -- ----
      ---------
        ------------- -
      --
      ---------------- -- ------------------
    --
  --
-
---

这里设置了以下属性:

  • selected:默认的选中日期,如果未选中日期则为 undefined。
  • disabledDays:禁用某些星期几的日期选择。
  • minDate:可选择的最早日期。
  • maxDate:可选择的最晚日期。
  • locale:日期语言及一些格式相关配置,详见后文。
  • onSelect:选择日期时触发的回调函数。

高级用法

日历视图配置

ts-react-infinite-calendar 支持以下几种日历视图:

  • Infinity (默认):最常见的日历视图,以月为单位展示日期。
  • Months:以年为单位展示日期。
  • Years:以几年为单位展示日期。

可以通过修改 Calendar 实例的 display 属性来实现不同的视图展示,例如:

更多的属性设置见下表:

属性 类型 默认值 描述
display string Infinity 初始的日历页面配置。可选值:'Infinity'、'Months'、或者 'Years'
displayOptions object 一些关于宽度、高度等宽高比例的设置
width number Infinity 宽度
height number Infinity 高度
shouldHeaderAnimate boolean false 是否开启头部动画

语言及一些格式相关配置

使用 locale 属性可以设置日期的语言及一些格式相关配置。可以通过 import 来引入语言文件:

然后在 Calendar 实例中引用:

也可以自定义其他语言,例如中文:

自定义语言文件示例:

-- -------------------- ---- -------
------ ------- -
  -- ------
  ----------- -
    -----
    -----
    -----
    -----
    -----
    -----
    -----
    -----
    -----
    -----
    ------
    ------
  --

  -- --------
  -------------- ----- ---- ---- ---- ---- ---- -----

  -- -----
  ----------- -
    ----- -----
    ------ -----
  --

  -- -------
  -- --------------- ---------------------
  -- ----------- ------------
  -------------- ------ ------ --------------- --
    ---------------- ----------------------
  ----------------- ------------ ----- -- ------------------
  ------------------ -- -- ---------------
--

更多语言相关的属性设置见下表:

属性 类型 默认值 描述
monthNames string[](长度为12) 英文月份 月份
monthShortNames string[](长度为12) 英文月份 简写的月份
dayNamesShort string[](长度为7) 星期几 简写的星期
dayNames string[](长度为7) 星期几 全称的星期
todayLabel object(形如 {long: '今天', short: '今天'}) 今天 按钮上的字样 for selection
chooseAvailableStartDateLabel string 在 startDate 和 endDate 之间的日期字符串。
formatToday function today 自定义今天的显示格式,参数为 today Date 对象
formatWeekday function 自定义显示 week day 的格式(简称),参数为两个字符串:长名称和短名称
formatWeekNumber function 自定义显示 week number 的格式,参数为两个字符串:星期数和 date 日期字符串
getFirstDayOfWeek function 0(周日) 自定义第一个显示的 weekday,返回数字 0(周日)到 6(周六)之间的数字
weekStartsOn number 0(周日) 与 getFirstDayOfWeek 相同

日历操作相关属性配置

除了上述视图、语言等的配置,ts-react-infinite-calendar 还支持通过属性的配置实现一些操作的个性化配置,例如禁用一些日期(disabledDays,必须是 0-6 之间的数字),选择日期后的回调函数(onSelect),单双击选择的日期,限定日期选择的范围(minDate和maxDate)等。

下表展示了该属性的详细配置:

属性 类型 描述
onSelect func 点击或滚动选择日期时的回调函数。第一个参数为被选中的日期的 ISO 日期字符串(YYYY-MM-DD)
selected object 选中的日期对象
disableScroll boolean 隐藏日历滚动条
width number Calendar 组件的宽度
height number Calendar 组件的高度
minDate date or str 可选择的最早日期
maxDate date or str 可选择的最晚日期
min date or str 可选择的最早日期(同 minDate)
max date or str 可选择的最晚日期(同 maxDate)
locale object 指定语言和一些格式相关的配置,详见上方 语言及一些格式相关配置 的表格
theme object 指定日历主题,详见下方 主题类型 的表格
tabIndex number 指定日历获取焦点时元素的 tabindex
className string 增加自定义的 class,以方便自定义样式
autoFocus boolean 在组件渲染时自动对日历获取焦点
display string 显示 Calendar 组件时显示的视图,详见视图类型
disabledDays array 数组中的数字代表周几(0–6,0代表星期天),将禁用所有这些星期的日期。例如 [0,6] 将禁用星期天和星期六每周的所有日期
ranges array 字符串日期范围。例如:[{start: '2018-10-01', end: '2018-10-30'}]
events object 事件日期。例如:{'2018-12-25': {color: '#FF00FF', label: 'Christmas'}}
showOverlay boolean 在鼠标悬停在日期上时向日期添加覆盖图层
overlayPosition string overlay 的位置,支持 'top'、'bottom'、'left' 或 'right'
autoFocusRangeEnd boolean 设置焦点并高亮需要选择的范围的结束日期。辅助键 alt 或 option 可强制选择范围的开始日期
hoverRange boolean 高亮被 hover 的区域的范围,只能用于 diff 等于 0 的区域
displayOptions object
shouldHeaderAnimate boolean false

主题类型

ts-react-infinite-calendar 支持多种不同的主题类型。可以选择预设的主题或创建一个全新主题。我们可以在 css 中覆盖预设主题或者在 js 中重新制定新的主题。

下表是内置主题样式的代码:

-- -------------------- ---- -------
--
    -------------------------- ------- -----
--
---------- -
  -------- -------------
  ----------- -----------
  ------------ -----
  -------------------- -----
-
---------------------- -
  ------------------- -----------
  ---------------------- -------
  --------------- ----
-
-------------------- -
  ------------------- ---------
  ---------------------- -------
  --------------- -------
-
------------------ -
  --------- ---------
  --------------- --
  -------------- ----
  ----------- ------ ---- ------------------ ----- -- ---
  ----------- - --- --- ------- -- -- -----
  ----------- -----
-
------------------ -
  ----------- -------
  ------------------ ----------
  ---------- ----------
-
---------------------------------------- -
  ------------------ ----------
  ---------- ----------
-
------------------------------------------ -
  ------- --- ----- --------
-
------------------------------ -
  --------- ---------
  ----- ----
  ---- --
  ------ -----
  ------- -----
  --------- -------
  ------------------ -----------------
  ---------- -----------------
-
----------------- -
  --------- ---------
  -------- --
  ------- -----
  ----------- --
  -------------- --- ----- --------
-
----------------- ------ -
  --------- ---------
  -------- --
  ---- --
  ------- -----
  -------- - -----
  ------ --------
  ---------- -----
  ----------- -------
  ----------- ------------
  ------- --
  -------- --
-
----------------- -------------
----------------- ------------ -
  ------- --------
  ------ --------
-
----------------- ------------------ -
  -------- -------------
  --------- ---------
  ---- --
  ----- --
  ------ -----
  ------- -----
  ----------- -------
  ---------- -----
-
----------------- ------------------ - --- -
  -------- -------------
  --------- ---------
  ----------- ---- ---- ------------------ ----- -- ---
-
----------------- ------------------------ -
  ------ -----
-
----------------- ------------------------ -
  ------ ------
-
----------------- ------------------------ - --- -
  ----- ------
-
----------------- ------------------------ - --- -
  ----- -----
-
----------------- ------------------------ - ----
----------------- ------------------------ - --- -
  --------- ---------
  ---- --
  ------ --------
-
----------------- ------------------ - --- - ---- -
  -------- -------------
  -------- - -----
-
----------------- ------------------- -
  ----------- ----
  -------- -----
  --------- ---------
  -------- --
  ----------- --- ----- --------
  ----------- -----
-
------------------- -
  -------- -------------------
  ----------- ----
  ---------------- ---------
  --------------- --
  ------------ -----
-
---------------------- -
  -------- ----------
-
------------------ -
  -------- -----------
  -------- - -----
  ------ --------
  ----------- -------
  ---------- -----
  ------------ ----
-
--------------- -
  -------- ----------------
-
--------------- -
  -------- ----------
-
-------------- -
  -------- -----------
  -------- --
  -------------- ----
  --------------- -------
  ----------- -------
  ---------- -----
  -------- --
  ------- --------
  ----------- ---------------- ---- ------------
-
--------------------- -
  ------------ ----
-
----------------------------------------------------------------------------------- -
  --------- ---------
  ----------------- --------
  ------ --------
-
----------------------------------------------------------------------------------------- -
  ----------------- --------
-
----------------------------------------------------------------------------------------- -
  ----------- - - - --- ------- ---- ---- -----
-
------------------------------------------------------------------------------------------------------------------- -
  ----------------- --------
  ------ --------
-
--------------------------------------------------------------------------------------------------------------------------- -
  ----------------- ------- ---- ---- -----
  ------ --------
-

----------------------- -
  ------- --------
  ------ --------
  ----------------- --------
-

------------------------ -
  ------- --------
  ------ --------
  ----------------- --------
-

---------------------------- -
  -------- ----
  ------- --------
-

----------------------------------- -
  -------- -----
-

---------------------------
-------------------------- -
  --------- ---------
  ---- -----
  ------- --
  -------- --
  -------- -------------
  ------- --
  -------- --
-

-------------------------- -
  ----- -----
  ---------- --------------
-

-------------------------- -
  ------ -----
  ---------- ---------------
-

----------------------------------------- -
  ------- --------
  ----------- -------
-

---------------------------- -
  ------ --------
  -------------- ----
  ----------------- -----
  ------- -----
  ------ -----
  ------- ----- - - ------
  -------- --
  -------- --

- ------------------------------------------------------------------------------ --------
------------------------------------------------------------------------------------------------------------------------
纠错
反馈