You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决DevExtreme React DateBox中calendarOptions的cellTemplate失效问题?

DevExtreme React DateBox日历单元格自定义失效问题解决

问题说明

我发现DevExtreme React的cellTemplate官方示例实际用的是cellRender的写法,官方文档说明cellComponent和cellRender是cellTemplate在React中的别名。但在DateBox的calendarOptions中使用cellTemplate自定义周末单元格为红色时,日历显示空白(单元格仍可点击),代码示例如下:

import React from 'react';
import DateBox from 'devextreme-react/date-box';
import moment from 'moment';

const CustomDateBox = () => {
  const isWeekend = (date) => [0, 6].includes(moment(date).day());

  const renderCell = (cellData) => (
    <div style={{ color: isWeekend(cellData.date) ? 'red' : 'inherit' }}>
      {cellData.text}
    </div>
  );

  return (
    <DateBox
      labelMode="hidden"
      openOnFieldClick={true}
      hoverStateEnabled={false}
      calendarOptions={{
        cellTemplate: renderCell
      }}
    />
  );
};

export default CustomDateBox;

解决方案

在React环境下,嵌套配置(如calendarOptions)中需要使用React专属的cellRender属性,而非通用的cellTemplate。尽管文档称cellTemplate是别名,但在子组件的配置对象里,必须严格使用cellRender才能正确渲染自定义单元格内容。

修正后的代码如下:

import React from 'react';
import DateBox from 'devextreme-react/date-box';
import moment from 'moment';

const CustomDateBox = () => {
  const isWeekend = (date) => [0, 6].includes(moment(date).day());

  const renderCell = (cellData) => (
    <div style={{ color: isWeekend(cellData.date) ? 'red' : 'inherit' }}>
      {cellData.text}
    </div>
  );

  return (
    <DateBox
      labelMode="hidden"
      openOnFieldClick={true}
      hoverStateEnabled={false}
      calendarOptions={{
        // 替换cellTemplate为cellRender
        cellRender: renderCell
      }}
    />
  );
};

export default CustomDateBox;

内容的提问来源于stack exchange,提问作者hokwanhung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:22:21