惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
Y
Y Combinator Blog
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Martin Fowler
Martin Fowler
博客园_首页
大猫的无限游戏
大猫的无限游戏
美团技术团队
S
SegmentFault 最新的问题
T
The Blog of Author Tim Ferriss
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
MyScale Blog
MyScale Blog
小众软件
小众软件
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
N
Netflix TechBlog - Medium
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园 - 【当耐特】
J
Java Code Geeks
F
Fortinet All Blogs
宝玉的分享
宝玉的分享
Stack Overflow Blog
Stack Overflow Blog
博客园 - 司徒正美

博客园 - 漫思

python使用.env构建开发和生产环境 python项目的构建 nodejs构建CICD时的思考  成为 AI 智能体工程师的 10 个步骤 es6的 yield python 中的 yield 笔记本的A壳 thinkpad 更换 reduce() in Python python的字段赋值和取值的操作 python的语法类似于lodash分组展开,合并分组操作 SelectMany C# lodash 数组的常用做法 lodash里面的常用方法 技术的边界 Reduce 和 Transduce 的含义 尤雨溪创办的 VoidZero 官宣加入 Cloudflare,前端 Vite 等保持开源 Ramda 函数库参考教程 ramda es 数组的方法 flatmap map object.entity的教程 Map与FlatMap:在数据处理中的区别与联系 flat、flatmap与map的用法区别1 flat、flatmap与map的用法区别 AI不是从天而降,它经历了七十年三起三落:读懂AI的第三课 Agent 17 种架构模式 分析 & 思考 只有踩过坑才懂:前端生成唯一 ID,别用 Date.now ()了!试试它crypto.randomUUID() FastAPI python并发 代码是 AI 写的,生产事故谁背锅? AI Agent 走出 Demo 幻觉的唯一解药:Harness Engineering
Form.Item 无法直接绑定两个 name
漫思 · 2026-04-09 · via 博客园 - 漫思

Form.Item 的 name 只支持单个值。对于 RangePicker 返回的日期范围,有以下几种方案:

方案1:用一个 name 存数组,提交时拆分(推荐)

<Form.Item label="日期范围" name="dateRange" rules={[{ required: true }]}>
  <DatePicker.RangePicker style={{ width: "100%" }} />
</Form.Item>

// onFinish 中拆分
const onFinish = (values: any) => {
  const [startDate, endDate] = values.dateRange || [];
  const payload = {
    ...values,
    start_date: startDate?.format('YYYY-MM-DD'),
    end_date: endDate?.format('YYYY-MM-DD'),
  };
  delete payload.dateRange;
  console.log(payload);
};

方案2:不绑定 name,手动 setFields

<Form.Item label="日期范围">
  <DatePicker.RangePicker
    style={{ width: "100%" }}
    onChange={(dates) => {
      form.setFieldsValue({
        start_date: dates?.[0]?.format('YYYY-MM-DD'),
        end_date: dates?.[1]?.format('YYYY-MM-DD'),
      });
    }}
  />
</Form.Item>

{/* 两个隐藏字段存真实值 */}
<Form.Item name="start_date" hidden><Input /></Form.Item>
<Form.Item name="end_date" hidden><Input /></Form.Item>

方案3:用 getValueFromEvent + normalize 转换

<Form.Item
  label="日期范围"
  name="dateRange"
  normalize={(value) => {
    if (!value) return undefined;
    return value.map((v: any) => v?.format('YYYY-MM-DD'));
  }}
  getValueProps={(value) => ({
    value: value ? value.map((v: string) => dayjs(v, 'YYYY-MM-DD')) : undefined
  })}
>
  <DatePicker.RangePicker style={{ width: "100%" }} />
</Form.Item>

// onFinish 中拿到的就是 ['2026-04-01', '2026-04-09']
// 再拆分:
const onFinish = (values: any) => {
  const [start_date, end_date] = values.dateRange || [];
  // ...
};

总结

方案1 最简单,推荐 提交时需手动拆分 方案2 字段独立,后端友好 代码多,校验麻烦 方案3 存储为字符串,兼顾回显 稍复杂
方案优点缺点

推荐方案1,简单清晰,在 onFinish 里一行拆开即可。