Установить список dict для государства в React - PullRequest
0 голосов
/ 20 марта 2020

У меня есть список возможных вариантов. Это выглядит так:

document.__moreComments = [
  { id: 2, author: '...', text: '...', date: '...' },
  { id: 1, author: '...', text: '...', date: '...' },
];

Я хочу отсортировать данные по дате и отобразить их. Во-первых, я хочу создать объект в объявлении и установить его в состояние. Затем сортировка и представление изменяющихся данных. У меня проблема.

import React, { Component } from "react";

var addcomments = document.__moreComments;

class AdditionalComments extends Component {
  constructor() {
    super();
    //    this.state = addcomments

    this.state = {
      comments: addcomments.map(addcomment => [
        addcomment.id,
        addcomment.author,
        addcomment.text,
        addcomment.date
      ])
    };
    console.log(this.state);
  }

  changeMessage() {
    let sortedComments = this.state.comments;
    this.setState({
      comments: sortedComments.sort((a, b) => a.date > b.date)
    });
    console.log(this.state.comments);
  }
  render() {
    return (
      <div>
        <h1>hi Eugene {this.state.comments} </h1>
        <button onClick={() => this.changeMessage()}>Click</button>
      </div>
    );
  }
}

export default AdditionalComments;

Я создаю dict of dict. И конечно я хочу знать. Правильно ли делать то, что я делаю, или мне нужен другой подход? Спасибо. Я новичок.

1 Ответ

0 голосов
/ 20 марта 2020

Сортировка сортирует массив на месте (это означает, что он не будет возвращать новый экземпляр массива), поэтому ваш массив не сортируется. Вы должны попробовать следующий подход:

changeMessage() {
    let sortedComments = [...this.state.comments].sort((a,b) => new Date(a.date) - new Date(b.date))
    this.setState({
      comments: sortedComments
    }, () => {console.log(this.state.comments)});
  }
...