You need to enable JavaScript to run this app. 如何在redux-form中使用react-dates及表单取值为空问题排查求助
优惠活动
大模型
产品
解决方案
定价
更多

如何在redux-form中使用react-dates及表单取值为空问题排查求助

问题根因

  • 日期变更回调onDatesChange中,你使用input.onChange(input.value)向redux-form同步的是字段原有值(初始为空),没有传入新选择的起止日期,导致redux-form中该字段始终为空
  • 代码存在无效属性与拼写错误:DateRangePicker不存在date属性,展示月份数的属性名应为复数numberOfMonths,自定义的onFocusChange方法未被实际调用,还操作了state中不存在的focused字段

修复后的组件代码

export class DateRanger extends Component {
  constructor(props) {
    super(props)
    this.state = {
      startDate: null,
      endDate: null,
      focusedInput: null,
    }
  }

  render() {
    const { startDate, endDate, focusedInput } = this.state
    const { input } = this.props
    return (
      <div className="defaultBorderColor">
        <DateRangePicker
          isOutsideRange={(day) => !isInclusivelyBeforeDay(day, moment())}
          startDate={startDate}
          className="activeDatePicker"
          endDate={endDate}
          startDateId="date_input_start"
          endDateId="date_input_end"
          onDatesChange={({ startDate: dateStart, endDate: dateEnd }) => {
            // 将新选择的日期同步到redux-form
            // 可根据业务需要调整存储格式,比如转成字符串:dateStart?.format('YYYY-MM-DD')
            input.onChange({
              startDate: dateStart,
              endDate: dateEnd
            })
            this.setState({
              startDate: dateStart,
              endDate: dateEnd,
            })
          }}
          numberOfMonths={1}
          focusedInput={focusedInput}
          onFocusChange={(focusedInput) => this.setState({ focusedInput })}
          showClearDates
          minimumNights={0}
        />
      </div>
    )
  }
}

如果需要将日期范围存储为拼接的字符串格式,可将input.onChange的参数替换为dateStart && dateEnd ? ${dateStart.format('YYYY-MM-DD')},${dateEnd.format('YYYY-MM-DD')} : ''即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 02:12:09