如何在日期选择器事件中使React最终形式的``字段''值发生变化?

时间:2019-04-28 11:15:13

标签: javascript reactjs react-final-form

我想创建一个日期范围字段,这样在单击输入字段时,我将打开一个日期选择器组件并选择一个日期范围。我想用选定的范围填充输入字段。

我到目前为止所做的:

我创建了一个由 Field 组件包装的输入字段。对于输入的值,我将其设置为this.state.DateRange。我会根据从DatePicker组件中选择的日期范围进行更改。

   handleSelect({selection}){
    let startDate = format(selection.startDate, 'DD/M/YYYY');
    let endDate = format(selection.endDate, 'DD/M/YYYY');

    this.setState({
      selection,
      DateRange: `${startDate} - ${endDate}`
    })
    }

    //TextFieldInput is a styled component - styled.input

    render(){

      return (
      <div>
        <Field name='test'>

          {({ input, meta, ...rest }) => (
            <TextFieldInput
              {...input}
              {...meta}
              value={this.state.DateRange}
            />
          )}
        </Field>
            <DateRangePicker
                ranges={[this.state.selection]}
                onChange={this.handleSelect}
          months={2}
          minDate={new Date()}
          showMonthAndYearPickers={false}
          showDateDisplay={false}
          staticRanges={[]}
          inputRanges={[]}
          direction='horizontal'
            />
      </div>
        )
    }

我想做什么:

我可以通过这种方法设置输入字段的值,但是当我按下Submit时,我无法获得该值。似乎尽管已将值设置为输入,但它并未传递给onSubmit(values)

1 个答案:

答案 0 :(得分:0)

我可以收集的是,您希望从子组件中设置父组件的状态。但是,在<TextFieldInput/>中,您并没有指向父组件状态。

编辑:我知道我没有提供完整的答案,让我重构代码:

class ParentComponent extends React.Component {
  constructor( props ) {
    super( props );
    this.handleSubmit = this.handleSubmit.bind( this );
    this.state = {
      // your state
    };
  }
...

handleSubmit = ( event ) => {
    event.preventDefault();

    this.setState({
      DateRange: event.target.name.value
    });

    event.target.reset(); // resets fields
  }
...

<TextFieldInput handleSubmit={ this.handleSubmit } ... />
...

然后在“子级”组件中:

...
<form onSubmit=( ( e ) => { props.handleSubmit( e ); } }>

  <input value={ props.value } name="DateRange" /> // the handleSubmit sees the value by the input name, allowing multiple inputs if necessary in the future
...