javascript - React 数据网格自定义编辑器与语义 ui 日历日期选择器(dateinput)一起工作

标签 javascript reactjs semantic-ui semantic-ui-react react-data-grid

我试图为我的 react 数据网格中的一行实现自定义编辑器,我希望让用户从日历输入而不是键入。 我想出了一些不断返回无效日期的东西。

索引.js

import React, { Component } from "react";
import ReactDOM from "react-dom";
import "semantic-ui-css/semantic.min.css";
import {
  Icon,
  Menu,
  Checkbox,
  Grid,
  Dropdown,
  Rail,
  Segment,
  MenuHeader,
  Responsive
} from "semantic-ui-react";
import ReactDataGrid from "react-data-grid";
import autoBind from "react-autobind";
import { Editors, Formatters, Data, Filters } from "react-data-grid-addons";
import { connect } from "react-redux";
import moment from "moment";
import DateEditor from "./DateEditor";

import "./styles.css";

const columns = [
  { key: "id", name: "ID" },
  { key: "title", name: "Title" },
  { key: "date", name: "Date", editor: DateEditor }
];

const rows = [
  { id: 0, title: "Task 1", issueType: "Bug", labelColour: "#1D1D1F" },
  { id: 1, title: "Task 2", issueType: "Story", labelColour: "#1D1D1F" },
  { id: 2, title: "Task 3", issueType: "Epic", labelColour: "1D1D1F" }
];

class Example extends React.Component {
  state = { rows };

  onGridRowsUpdated = ({ fromRow, toRow, updated }) => {
    this.setState(state => {
      const rows = state.rows.slice();
      for (let i = fromRow; i <= toRow; i++) {
        rows[i] = { ...rows[i], ...updated };
      }
      return { rows };
    });
  };
  render() {
    return (
      <div>
        <ReactDataGrid
          columns={columns}
          rowGetter={i => this.state.rows[i]}
          rowsCount={3}
          onGridRowsUpdated={this.onGridRowsUpdated}
          enableCellSelect={true}
        />
      </div>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<Example />, rootElement);

DateEditor.js


import { DateInput } from "semantic-ui-calendar-react";
import React, { Component } from "react";
import ReactDOM from "react-dom";
import { Form } from "semantic-ui-react";
import autoBind from "react-autobind";
import moment, { isMoment } from "moment";

export default class DateEditor extends React.Component {
  constructor(props) {
    super(props);
    this.state = { dateEditor: "" };
    autoBind(this);
    //moment(props.value).format('L')
  }
  getValue() {
    //return { date: moment(this.state.dateEditor).format("L") };
    return { date: this.state.dateEditor };
  }

  getInputNode() {
    return ReactDOM.findDOMNode(this);
  }

  handleChange = (event, { name, value }) => {
    this.setState({ [name]: value }, () => this.props.onCommit());
    //if (this.state.hasOwnProperty(name)) {
    //  this.setState({ [name]: value }, () => this.props.onCommit()); //);
    //}
  };

  render() {
    return (
      <Form>
        <DateInput
          name="dateEditor"
          dateFormat={moment().format("L")}
          placeholder="Date"
          value={this.state.dateEditor}
          //{moment(this.state.date).format('L')}
          iconPosition="left"
          onChange={this.handleChange}
        />
      </Form>
    );
  }
}

如果有人有想法,我在这里也有我的代码实验 React-Data-Grid Custom Editor at CodeSandBox 一些引用:Semantic UI CalendarReact-Data-Grid Custom Editor非常感谢人们可能对我做错的地方有一些想法,真的很感激。

最佳答案

实际上,它是有效的,如果您双击日期输入,或在那里开始输入,它会显示日历以供您选择日期。问题在于 react-data-grid,它似乎是 react-data-grid 的默认行为。你可以看到例子 here .该问题已在 reach-data-grid github 上创建, 希望他们能解决这个问题。

参见 here ,您可以轻松地看到 DateEditor 组件运行良好。我只是在 react-data-grid 组件之外显示了该组件。

目前,我认为最好避免使用 react-data-grid,而是使用来自 semantic-ui-react 的表。

希望对您有所帮助。

关于javascript - React 数据网格自定义编辑器与语义 ui 日历日期选择器(dateinput)一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55153092/

相关文章:

javascript - .addClass Javascript 代码未正确执行 - WordPress 网站

javascript - 需要刷新 iFrame 内容(在 Div 中加载页面内容)

asp.net-mvc-4 - 如何将 React 与 ASP.NET MVC 结合使用

javascript - 使用数组或字符串设置选择的 Semantic-UI 下拉列表

jquery - 如何禁用语义用户界面 Accordion 中的标题和内容?

javascript - Kraken API 中的 InvalidKey 使用 JS,而不是 Python

javascript - 是否有一个库可以实现 Angular 为2的vnc?

node.js - 如何使用 ExpressJS 一次 API 调用下载多个文件

javascript - 使用 React 处理大表单

css - 语义下拉 100% 宽度?