微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 redux-form 中使用 react-dates

如何解决如何在 redux-form 中使用 react-dates

我正在与 react-dates 合作开发 redux-form。逻辑已经实现,但是当我检查控制台的值时,它什么也没显示。我已经尝试过,但无法解决此问题。有人可以帮助我如何解决这个问题。谢谢

<Field component={Dateranger} type="text" name="date" label="Select Project" />

日期组件

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

  onFocusChange = (value) => {
    this.setState({ focused: !this.state.focused })
    const { input } = this.props
    input.onFocus(value)
  }

  render() {
    const { startDate,endDate,focusedInput } = this.state
    const { input } = this.props
    return (
      <div className="defaultBorderColor">
        <DaterangePicker
          {...input}
          isOutsideRange={(day) => !isInclusivelyBeforeDay(day,moment())}
          startDate={startDate}
          className="activeDatePicker"
          date={input.value}
          endDate={endDate}
          startDateId="date_input_start"
          endDateId="date_input_end"
          onDatesChange={({ startDate: dateStart,endDate: dateEnd }) => {
            input.onChange(input.value)
            this.setState(() => {
              return {
                startDate: dateStart,endDate: dateEnd,}
            })
          }}
          numberOfMonth={1}
          focusedInput={focusedInput}
          onFocusChange={(input) => this.setState({ focusedInput: input })}
          showClearDates
          minimumNights={0}
        />
      </div>
    )
  }
}

解决方法

您正在为 input.onChange(input.value) 发送与 redux-form 相同的先前值。所以你实际上并没有改变表单状态。

      onDatesChange={({ startDate: dateStart,endDate: dateEnd }) => {
        input.onChange(input.value)
        this.setState(() => {
          return {
            startDate: dateStart,endDate: dateEnd,}
        })
      }}

你需要把它改成

      input.onChange({
        startDate: dateStart,})

我还要指出,IMO,您不需要同时持有内部状态和 redux 状态。这应该是 redux 形式的受控输入。你得到 input.valueinput.onChange

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。