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

使用react-native-paper-dates多选日期后重弹弹窗报undefined is not function

react-native-paper-dates DatePickerModal多选模式二次打开弹窗报错修复

问题场景

使用react-native-paper-dates库的DatePickerModal组件并启用多选模式(mode="multiple")时,选择多个日期关闭弹窗后,再次打开弹窗会抛出"undefined is not function"错误。

问题代码

import { useState } from 'react';
import { DatePickerModal } from 'react-native-paper-dates';

// ...

const [showDate, setShowDate] = useState(false);
const [dates, setDates] = useState<any>([]);

// ...

<DatePickerModal
  locale="en"
  mode="multiple"
  visible={showDate}
  onDismiss={() => setShowDate(false)}
  dates={dates}
  onConfirm={dates => {
    console.log(dates);
    setShowDate(false);
    setDates(dates);
  }}
/>

修复方案

通过useCallback缓存onDismiss和onConfirm回调函数,保持回调引用的稳定性,同时注意多选模式下onConfirm的参数是包含选中日期数组的对象,需通过params.dates获取选中日期:

import { useState, useCallback } from 'react';
import { DatePickerModal } from 'react-native-paper-dates';

// ...

const [showDate, setShowDate] = useState(false);
const [dates, setDates] = useState<any>([]);

const onDismiss = useCallback(() => {
  setShowDate(false);
}, [setShowDate]);

const onConfirm = useCallback((params: any) => {
  setShowDate(false);
  setDates(params.dates);
}, []);

// ...

<DatePickerModal
  locale="en"
  mode="multiple"
  visible={showDate}
  onDismiss={onDismiss}
  dates={dates}
  onConfirm={onConfirm}
/>

说明

未缓存的回调函数会在组件每次渲染时创建新实例,导致DatePickerModal内部监控的回调引用频繁变化,触发内部逻辑错误;使用useCallback可固定回调引用,避免此类问题。同时多选模式下onConfirm的参数结构与单选模式不同,需正确提取选中的日期数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:27:12