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

在React项目中为Formio集成自定义波斯日期选择器

在React Formio中集成自定义波斯日期选择器

1. 安装必要依赖

选择合适的波斯日期选择库,比如react-persian-datepicker(或你偏好的同类库),同时安装jalaali-js处理公历与波斯历的转换:

npm install react-persian-datepicker jalaali-js

2. 创建自定义Formio日期组件

新建PersianDatePickerComponent.js文件,继承Formio的DateComponent,替换默认渲染逻辑:

import React from 'react';
import { DateComponent } from '@formio/react';
import PersianDatePicker from 'react-persian-datepicker';
import { toJalaali, toGregorian } from 'jalaali-js';

class PersianDatePickerComponent extends DateComponent {
  // 将Formio存储的ISO日期转换为波斯历格式
  getPersianDateValue() {
    if (!this.state.value) return null;
    const date = new Date(this.state.value);
    const jDate = toJalaali(date.getFullYear(), date.getMonth() + 1, date.getDate());
    return `${jDate.jy}/${jDate.jm}/${jDate.jd}`;
  }

  // 将波斯历日期转换为ISO格式,同步给Formio
  handleDateChange = (selectedDate) => {
    if (!selectedDate) {
      this.setState({ value: null });
      return;
    }
    const [jy, jm, jd] = selectedDate.split('/').map(Number);
    const gDate = toGregorian(jy, jm, jd);
    const isoDate = new Date(gDate.gy, gDate.gm - 1, gDate.gd).toISOString();
    this.setState({ value: isoDate });
  };

  render() {
    return (
      <div>
        <PersianDatePicker
          value={this.getPersianDateValue()}
          onChange={this.handleDateChange}
          placeholder="انتخاب تاریخ"
        />
      </div>
    );
  }
}

export default PersianDatePickerComponent;

3. 注册自定义组件到Formio

在项目入口或Formio表单所在组件中,注册自定义组件以替换默认日期组件:

import { Formio } from '@formio/react';
import PersianDatePickerComponent from './PersianDatePickerComponent';

// 注册自定义组件,覆盖默认的date类型
Formio.registerComponent('date', PersianDatePickerComponent);

4. 在Formio表单中使用

在Formio的表单JSON配置中,直接使用type: "date"字段,即可渲染自定义波斯日期选择器:

{
  "components": [
    {
      "label": "تاریخ تولد",
      "type": "date",
      "key": "birthDate",
      "input": true
    }
  ]
}

注意事项

  • 若使用其他波斯日期库,只需调整getPersianDateValue和handleDateChange中的日期转换逻辑即可。
  • 需处理空值、无效日期的边界情况,避免表单提交出错。
  • 可根据需求为日期选择器添加自定义样式类,适配项目UI规范。

内容的提问来源于stack exchange,提问作者Ali Goodarzi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:12:11