我试图在我的React Data Grid中实现一个自定义编辑器,我希望让用户从日历中输入而不是输入。我提出了一些不断返回无效日期的东西。
index.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自定义编辑器在codesandbox上一些参考:语义UI日历和React-data-Grid自定义编辑器非常感谢,人们可能有一些想法,我做错了,非常感谢。
实际上,它正在工作,如果双击日期输入或开始在此输入,它将向您显示以下日历以选择日期。问题是在React-Data-Grid上,似乎是React-Data-Grid的默认行为。您可以在这里看到示例。该问题已经在Reach-Data-Grid GitHub上创建,希望他们能解决此问题。
请参阅此处,您可以轻松地看到DateDeditor组件运行良好。我刚刚在React-Data-Grid组件之外展示了该组件。
目前,我认为避免React-Data-Grid并使用Smantic-ui-react的表是一件好事。
希望它会有所帮助。