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

React中如何将Datepicker返回的日期对象转为字符串作为参数传递

问题原因

你在构造对象字面量时错误使用了属性简写语法:

  • 当你写 { text, selectedDate, reminder } 时,属于JS对象属性简写,等价于 { text: text, selectedDate: selectedDate, reminder: reminder },该语法仅支持直接传入变量名,自动将变量名作为属性键、变量值作为属性值。
  • 你直接写 selectedDate.toLocaleDateString() 时,没有指定对应的属性键,JS无法识别该表达式对应的对象属性,因此会抛出语法错误。

解决方案

有两种常用解决方式,可按需选择:

方案1:传参时显式指定属性键(无需修改其他现有逻辑)

直接给日期属性显式声明键名,保持键名和原有逻辑一致即可:

onAdd({ 
  text, 
  selectedDate: selectedDate.toLocaleDateString(), 
  reminder 
})

注意你开启了DatePicker的isClearable属性,用户清空日期时selectedDate会是null,直接调用方法会报错,可以加个空值判断:

onAdd({ 
  text, 
  selectedDate: selectedDate ? selectedDate.toLocaleDateString() : '', 
  reminder 
})

方案2:存储状态时直接存字符串(无需修改传参逻辑)

修改DatePicker的onChange回调,选中日期时就转成字符串存入state,原有传参代码不需要改动:

<Datepicker 
    selected={selectedDate ? new Date(selectedDate) : null} 
    onChange={(date) => setSelectedDate(date ? date.toLocaleDateString() : '')}
    placeholder='Select Date' 
    minDate={new Date()}
    isClearable 
    showYearDropdown
    scrollableYearDropdown  
/>

这里需要注意,DatePicker的selected参数需要接收日期对象,所以绑定的时候要把字符串转回Date类型。

额外补充

如果你后续有日期排序、多端格式统一的需求,更推荐存储ISO格式的日期字符串,使用toISOString()替代toLocaleDateString(),渲染的时候再根据需求转成对应格式的展示文本,灵活性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:51:02