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

React Big Calendar自定义年视图传递额外Prop报错如何解决?

react-big-calendar自定义视图传自定义prop解决方案

报错原因

你在views配置中用匿名函数包裹YearView返回新组件时,没有继承原YearView挂载的navigate、title两个静态方法,react-big-calendar渲染时需要读取这两个静态方法处理视图导航和标题生成,找不到就抛出了TypeError: Cannot read property 'title' of undefined错误。


可用解决方案

方案1:直接给Calendar组件传自定义prop(最简)

react-big-calendar会自动将所有未被自身消费的自定义prop透传给所有自定义视图组件,无需包装视图:

<Calendar
  localizer={localizer}
  events={events || []}
  startAccessor="start"
  endAccessor="end"
  defaultView="year"
  views={{
    year: YearView
  }}
  components={{
    toolbar: props => (<Toolbar {...props} />)
  }}
  {/* 直接传自定义prop,会自动透传给YearView */}
  onCreateOrEdit={onCreateOrEdit}
/>

传参后直接在YearView的props中就能正常读取onCreateOrEdit。

方案2:给包装后的视图组件手动继承静态方法

如果你确实需要对视图做包装处理,就给包装后的组件挂载原组件的静态方法:

// 先定义包装组件
const WrappedYearView = props => (
  <YearView
    {...props}
    onCreateOrEdit={onCreateOrEdit}
  />
)
// 手动继承原YearView的静态方法,供react-big-calendar调用
WrappedYearView.navigate = YearView.navigate
WrappedYearView.title = YearView.title

// Calendar配置中直接用包装后的组件
<Calendar
  localizer={localizer}
  events={events || []}
  startAccessor="start"
  endAccessor="end"
  defaultView="year"
  views={{
    year: WrappedYearView
  }}
  components={{
    toolbar: props => (<Toolbar {...props} />)
  }}
/>

额外优化提示

你当前YearView的useEffect依赖数组漏了events,会导致events更新时月份日历的事件列表不刷新,记得把events加到useEffect的依赖项里。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:09:03