Reactjs 将dict列表设置为React中的状态

Reactjs 将dict列表设置为React中的状态,reactjs,sorting,setstate,Reactjs,Sorting,Setstate,我有一份od指令清单。看起来是这样的: document.__moreComments = [ { id: 2, author: '...', text: '...', date: '...' }, { id: 1, author: '...', text: '...', date: '...' }, ]; 我想按日期对数据进行排序并进行渲染。 首先,我想在声明中创建一个对象,并将其设置为state。然后对变化的数据进行排序和表示。我有个问题 import React, { Compo

我有一份od指令清单。看起来是这样的:

document.__moreComments = [
  { id: 2, author: '...', text: '...', date: '...' },
  { id: 1, author: '...', text: '...', date: '...' },
];
我想按日期对数据进行排序并进行渲染。 首先,我想在声明中创建一个对象,并将其设置为state。然后对变化的数据进行排序和表示。我有个问题

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;
import React,{Component}来自“React”;
var addcomments=文件。\u\u更多注释;
类AdditionalComments扩展组件{
构造函数(){
超级();
//this.state=addcomments
此.state={
注释:addcomments.map(addcomment=>[
addcomment.id,
addcomment.author,
addcomment.text,
addcomment.date
])
};
console.log(this.state);
}
changeMessage(){
让sortedComments=this.state.comments;
这是我的国家({
注释:sortedComments.sort((a,b)=>a.date>b.date)
});
log(this.state.comments);
}
render(){
返回(
嗨,尤金{this.state.comments}
this.changeMessage()}>单击
);
}
}
导出默认附加注释;
我创造了一个又一个dict,当然我想知道。我所做的是正确的还是我需要另一种方法? 谢谢我是个初学者。

对数组进行适当排序(这意味着它不会返回数组的新实例),这就是您的数组无法排序的原因。您应该尝试以下方法:

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

您面临的问题是什么?我想对数据进行排序,但当我创建一个对象并使用此方法(sortedComments.sort((a,b)=>a.date>b.date))时,什么都没有发生。我想我在创建对象时犯了一个错误,因为我没有机会在对象中使用键。这是console.log声明后的评论:0:(4)[4,“Elena Builes”,“Excellent!”,“2017-09-11T11:30:05.919Z”]1:(4)[3,“German Toro”,“精彩!”,“2017-09-11T14:30:05.919Z”]长度:2 proto:Array(0)@zhenyachet上面的回答对你有帮助吗?没用。可能是因为我的组件注释中没有任何键。。。你能描述一下你所面临的问题吗?这是数据:[id:3,作者:'Germanán Toro',文本:'Flanger!',日期:'2017-09-11T14:30:05.919Z'},{id:4,作者:'Elena Builes',文本:'Excellent!',日期:'2017-09-11T11:30:05.919Z'},];我想按日期对列表进行排序我更新了代码。这将根据日期进行排序