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

如何将publicHolidays数组添加到events数组?React代码运行仅显示listLeave数据

问题原因

  • useMemo返回的events是缓存的计算值,只要依赖项leavesListStatus发生变化,就会重新生成仅包含请假列表数据的新数组,你在useEffect中push进去的节假日数据会被直接覆盖
  • 你直接修改events数组不会触发组件重新渲染,哪怕push操作执行成功,视图也不会拿到更新后的数据,因为events不是React的响应式状态
  • 代码细节问题:你使用map遍历publicHolidays仅执行push操作属于误用,map的设计目标是返回新数组,仅遍历执行副作用应该用forEach

修复方案

最优方案是直接将节假日相关的状态也加入useMemo的依赖项,一次性计算得到完整的events数组,完全不需要额外的useEffect:

const events = useMemo(() => {
  // 生成请假事件列表
  const leaveEvents = leavesListData.list.map(({ id, absenceTypeName, approvalStatusCd, startDate, endDate }) => {
    return {
      key: id,
      title: absenceTypeName,
      start: startDate,
      end: endDate,
      status: getLeaveStatusColor(approvalStatusCd),
      isPublicHoliday: false,
    };
  });
  // 节假日加载完成后拼接节假日事件
  if (statusPublicHolidays === RequestStatus.resolved && publicHolidays) {
    const holidayEvents = publicHolidays.map((event) => ({
      key: Number(event.eventId),
      title: event.name,
      start: event.startDate.toString(),
      end: event.endDate.toString(),
      isPublicHoliday: true,
      status: 'gray',
    }));
    return [...leaveEvents, ...holidayEvents];
  }
  return leaveEvents;
// 新增相关依赖项
}, [leavesListStatus, statusPublicHolidays, publicHolidays]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:09:03