代码之家  ›  专栏  ›  技术社区  ›  techie_questie

如何用redux表单实现日期选择器

  •  0
  • techie_questie  · 技术社区  · 6 年前

    在我的应用程序中,我使用Redux表单创建日期选择器。我已经按照官方文件执行了这项工作。

    https://redux-form.com/7.4.2/examples/react-widgets/

    我的代码-

    import React, { Component } from "react";
    import { Field, reduxForm } from "redux-form";
    import DateTimePicker from 'react-widgets/lib/DateTimePicker'
    import moment from 'moment'
    import momentLocalizer from "react-widgets-moment";
    import "react-datepicker/dist/react-datepicker.css";
    
    
    class SearchPoiHistory extends Component {
      componentDidMount() {
        this.handleInitialize();
      }
    
      handleInitialize() {
        const initData = {
          createdTimestamp: moment().format("YYYY-MM-DD"),
          otherMemberName: "",
          otherMemberCity: ""
        };
    
        this.props.initialize(initData);
      }
    
      // renderField(field) {
      //   return <input type="text" {...field.input} />;
      // }
    
      renderDatePicker = ({ input: { onChange, value }, showTime })  =>{
        return (
          <DateTimePicker
            onChange={onChange}
            dateFormat="YYYY-MM-DD"
            value={input.value ? new Date(input.value) : null}
          />
        );
      }
    
      renderDropDown({ input }) {
        return (
          <div className="dropDown">
            <div className="select">
              <select value={input.value} {...input}>
                <option value="" selected>
                  Select Name
                </option>
                <option value="A">A</option>
                <option value="B">B</option>
              </select>
            </div>
          </div>
        );
      }
    
      onSubmit(values) {
        console.log(values);
        console.log("Handling Search API");
        console.log(this.props);
        // this.props.propFromParent();
        this.props.propFromParent.action();
      }
    
      render() {
        const { handleSubmit } = this.props;
        return (
          <form
            onSubmit={handleSubmit(this.onSubmit.bind(this))}
            className="searchForm"
          >
            <table>
              <thead>
                <th className="col-sm-2"> Date</th>
                <th className="col-sm-2">Other Member Name</th>
                <th className="col-sm-2">Other Member City</th>
              </thead>
              <tbody>
                <tr>
                  <td>
                    <Field
                      label="Date"
                      name="createdTimestamp"
                      showTime={false}
                      component={this.renderDatePicker}
                    />
                  </td>
                  <td>
                    <Field
                      label="Other Member Name"
                      name="otherMemberName"
                      component={this.renderDropDown}
                    />
                  </td>
                  <td>
                    <Field
                      label="Other Member City"
                      name="otherMemberCity"
                      component={this.renderField}
                    />
                  </td>
                  <td>
                  </td>
                </tr>
              </tbody>
            </table>
          </form>
        );
      }
    }
    
    function validate(values) {
      const errors = {};
      return errors;
    }
    
    export default reduxForm({
      form: "SearchForm",
      validate
    })(SearchHistory);
    

    我得到的错误是“输入未定义”,我已经用文档中类似的方式实现了它,但并不确定哪里出错了。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Prasanna Jathan    6 年前

    使用 value 而不是 input.value

    下面是我实现的一个示例

    import React from 'react'
    import { Field, reduxForm } from 'redux-form'
    import DateTimePicker from 'react-widgets/lib/DateTimePicker';
    import moment from 'moment';
    import momentLocaliser from 'react-widgets-moment';
    import 'react-widgets/dist/css/react-widgets.css';
    
    momentLocaliser(moment);
    
    const renderDateTimePicker = ({ input: { onChange, value }, showTime }) => 
     <DateTimePicker
      onChange={onChange}
      format="DD MMM YYYY"
      time={showTime}
      value={!value ? null : new Date(value)}
    />
    
    let ReactWidgetsForm = props => {
     const { handleSubmit, pristine, reset, submitting } = props
     return (
     <form onSubmit={handleSubmit}>
      <Field
       name="dob"
       showTime={false}
       component={renderDateTimePicker}
      />
     </form>
     )
    }
    
    ReactWidgetsForm = reduxForm({
     form: 'reactWidgets'
    })(ReactWidgetsForm)
    
    export default ReactWidgetsForm