【问题标题】:How to add DatePicker on buttonclick reactjs如何在按钮单击反应 js 上添加 DatePicker
【发布时间】:2020-01-29 08:39:27
【问题描述】:

我想知道如何在单击按钮时使用datepicker 作为字段来创建动态行。 需要在按钮单击时动态创建行,行是在单击时生成的。 但是日期选择器不起作用。 但我需要添加一个字段为Datepicker 在 reactjs 中怎么做

我有 DynamicTable 组件,它创建带有字段的行,在 Home 中使用

import DynamicTable from "./../../../components/DynamicTable";
import DatePicker from "react-date-picker";

class Home exends React.PureComponent{
  constructor(props){
    super(props);
    this.state={
           additionalFields: [
              { date: "",  id: 0 }
            ]
    }
 handleAddRow = e => {
    if (e) e.preventDefault();
    const rowLength = this.state.additionalFields.length;
    let lastele = this.state.additionalFields[rowLength - 1];
    const item = {
      date: "",
       id: lastele.id + 1
    };
    this.setState(
      {
        additionalFields: [...this.state.additionalFields, item]
      }
    );
  };
    render() {
           return( <DynamicTable
                     columns={[
                                { dataFieldId: "date", label: "Date", addRow: true },                            
                                { dataFieldId: "AD", label: "" } 
                      ]}
                            rows={this.state.additionalFields}
                            addRow={this.handleAddRow}
                            />);

     }
  }

}

动态表格组件

import React, { Component } from "react";
import DatePicker from "react-date-picker";

class DynamicTable extends Component {
  constructor(props) {
    super(props);
    this.state = {
     date: new Date();
    };
  }
  handleDatePicker = (value, name, field, row) =>{
    //this.props.handleInputChange(value, field, row);
    this.setState({ [name] : value });
  }

renderRowData = (column, row, col, index, rowId, rowleng) => {
    if (column.addRow) {
      return (
        <td key={`tableview-td-${rowId}-${index}`}>
          {column.dataFieldId==="date" ?  
            <DatePicker  
            locale = "en-GB"
            className="datepicker"
            name={"date_"+rowId}
            onChange={(e)=>this.handleDatePicker(e, "date_"+rowId , column.dataFieldId, row)}
            value={this.state.date}
            /> 
          :"Loading"}

        </td>
      );
    }

  tableHeaders = () => (
    <thead>
      <tr>
        {this.props.columns.map((column, index) => {
          return <th key={`tableview-th-${index}`}>{column.label}</th>;
        })}
      </tr>
    </thead>
  );
  tableBody = () => {
    var rowleng = this.props.rows ? this.props.rows.length : 0;
    return (
      <tbody>
        {this.props.rows.map(row => {
          let index = row.id;
          const rowId = `row_${index}`;
          return (
            <tr key={`tableview-tr-inner-${index}`} id={rowId}>
              {this.props.columns.map((column, index) => {
                const col = column.dataFieldId.replace(/\s/g, "");
                return this.renderRowData(
                  column, row, col,  index, rowId, rowleng
                );
              })}
            </tr>
          );
        })}
      </tbody>
    );
  };
  renderRowData = (column, row, col, index, rowId, rowleng) => {
    if (column.addRow) {
      return (
        <td key={`tableview-td-${rowId}-${index}`}>
          <input
            type="text"
            defaultValue={row[column.dataFieldId]}
            placeholder={
              column.dataFieldId.charAt(0).toUpperCase() +
              column.dataFieldId.slice(1)
            }          
          />
        </td>
      );
    }
    if (col === "AD") {
      return (
        <td key={`tableview-td-${rowId}-${index}`}>
          <img
            className="addBtn1"
            onClick={this.props.addRow}
            src={"/assets/icons/ic_add_blue.png"}
          />
        </td>
      );
    }
    return <td key={`tableview-td-${rowId}-${index}`}>{row[col]}</td>;
  };
  render() {
    return (
      <React.Fragment>
        <div className="dynamicTable">
          <table>
            {this.tableHeaders()}
            {this.tableBody()}
          </table>
        </div>
      </React.Fragment>
    );
  }
}

export default DynamicTable;

【问题讨论】:

  • 同时添加您的 handleAddRow 代码
  • @PrakashKarena 谢谢,已添加代码
  • 您已成功获取日期选择器行。但是,您的日期选择器无法正常工作??
  • @PrakashKarena 是的,我得到的是行但不是日期

标签: javascript reactjs redux datepicker react-redux


【解决方案1】:

您可以将配置的日期选择器传递给您的子组件

        state = {
             date: new Date(),
         }            

        onChange = date => this.setState({ date })

        <DatePicker
          onChange={this.onChange}
          value={this.state.date}
        />

【讨论】:

  • 谢谢回复,我已经在附加字段中添加了date: &lt;DatePicker/&gt;, ,请您提供示例
  • 你在哪里使用 row.date 在你的代码中将 添加到表行????
  • rows={this.state.additionalFields}
  • 是的,我知道,但我的问题是您没有在 {this.props.rows.map(row => {
  • Datepicker 具有内置输入字段,只需将您的 Datepicker 传递给您的子组件并用作组件,而不是使用 date 类型的输入
猜你喜欢
  • 2016-09-14
  • 2013-07-13
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2022-11-12
  • 2015-05-12
  • 1970-01-01
相关资源
最近更新 更多