Пользовательский редактор сетки данных React работает с семантическим средством выбора даты календаря пользовательского интерфейса (dateinput)

Я пытался реализовать собственный редактор для строки в моей сетке данных реакции, которую я хочу разрешить пользователю вводить из календаря, а не печатать. Я придумал что-то, что продолжает возвращать неверные даты.

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);
  }

  handleChangeEvent = (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.handleChangeEvent}
        />
      </Form>
    );
  }
}

Если у кого-то есть идеи, у меня также есть мой эксперимент с кодом здесь Пользовательский редактор React-Data-Grid в CodeSandBox Некоторая ссылка: Календарь семантического пользовательского интерфейса и Пользовательский редактор React-Data-Grid Большое спасибо людям, у которых могут быть некоторые идеи, где я сделал неправильно, очень ценю.

Проблема заключается в текущем поведении моего кода, независимо от того, какую дату я выбрал, он вернет дату только сегодня.

MJ Tsai 14.03.2019 04:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
1 112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На самом деле, это работает, если вы дважды щелкнете по вводу даты или начнете печатать там, он покажет вам календарь для выбора даты. Проблема связана с react-data-grid, и это похоже на поведение по умолчанию для react-data-grid. Вы можете увидеть примеры здесь. Проблема уже была создана в сетке данных гитхаб. Надеюсь, они исправят эту проблему.

См. здесь, вы легко можете видеть, что компонент DateEditor работает хорошо. Я просто показал компонент вне компонента react-data-grid.

На данный момент я думаю, что было бы хорошо избегать сетки react-data-grid и вместо этого использовать таблицу из semantic-ui-react.

Надеюсь, это поможет.

Спасибо за быстрый ответ, однако я думаю, что желаемое поведение заключается в том, что ячейка получит дату, которую я выберу. Текущий код выводит дату только сегодня, поэтому мне интересно, не ошибся ли я где-нибудь?

MJ Tsai 14.03.2019 04:03

Также, согласно их обсуждению, проблема была решена, я думаю, что у меня проблемы с моим кодом.

MJ Tsai 14.03.2019 04:36

О, проблема с датой всегда сегодня из-за dateFormat = {moment().format("L")}, я удалил этот формат момента, и он работает нормально. посмотрите здесь codeandbox.io/s/q3jny4lm9j . Надеюсь, теперь это сработает. Спасибо

Abdullah Aziz 14.03.2019 06:18

Большое спасибо, вы спасли мой день! Следующий вопрос заключается в том, как я предполагаю форматировать MM/DD/YYYY? Большое спасибо!

MJ Tsai 14.03.2019 06:40

Здорово! Я также исправляю это в той же песочнице. На самом деле вы можете указать много строк формата, таких же, как форматирование моментов. вот список дополнительных опций: momentjs.com/docs/#/отображение/формат

Abdullah Aziz 14.03.2019 06:59

Для справки, я использую React 16.4.2/React Data Grid 6.1.0/Semantic UI Calendar 0.14.4/Semantic UI 0.84.0 в своей сборке, если использовать зависимости от более старой версии, возникнет проблема с передачей даты, выбранной в RDG.

MJ Tsai 15.04.2019 19:47

Другие вопросы по теме