javascript - 是否可以 setState 将新条目添加到带有编号键的对象的开头?
问题描述
我有一个包含number
,text
和时间的对象created
。当函数被触发时,我想在setState
这个对象的开头添加一个新的键值条目:
this.state.object = {
'0': {
'number': '6041234567',
'text': 'hello world',
'created': 1531748662
},
'1': {
'number': '4384321234',
'text': 'second message',
'created': 15317489823
}
}
新条目看起来像这样:
'0': {
'number': 1234567,
'text': "this is a new text",
'created': 1531748892
}
我想将它添加到对象的开头。
这就是我所拥有的,但它正在创建全新的条目,最重要的问题是它覆盖了第一个条目。
this.setState({
...this.state.recentMessages, this.state.recentMessages: 0 {
'number': 1234567,
'text': "this is a new text",
'created': 1531748892
},
});
解决方案
我的理解是,您想在列表顶部显示新记录。
我创建了一个示例应用程序,它将在顶部添加新项目。
https://codesandbox.io/s/olqmo1z6yq
Gist is that, records are added to the end, but in render()
, data is sorted in descending order by array key, which is retrieved by Object.entries.
import React from "react";
import ReactDOM from "react-dom";
class App extends React.Component {
state = { data: [] };
static number = 1;
addData = e => {
const newItem = {
number: App.number,
text: `text ${App.number}`,
created: 15317489825
};
App.number++;
this.setState(prevState => {
const data = [...prevState.data, newItem];
return { data };
});
};
render() {
const { data } = this.state;
const sortedData = Object.entries(data)
// sort in descneding order, showing the Latest message first.
.sort((a, b) => b - a)
.map(entry => {
const [key, item] = entry;
const { text, number, created } = item;
return (
<div key={key}>
<span>{text}</span>
<div>Number: {number}</div>
<div>Created: {created}</div>
<hr />
</div>
);
});
return (
<div>
<button onClick={this.addData}>Add New Data</button>
{sortedData}
</div>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
推荐阅读
- php - 如何在 json 响应中发送多个参数?(拉拉维尔)
- javascript - 使用 app.use('url','route_file') 对范围路由进行错误处理
- javascript - 我如何在 JavaScript 中使用 PHP 函数(Gutenberg WordPress)
- algorithm - 任意凸多边形中具有固定纵横比的最大对齐矩形?
- port - 来自互联网的端口转发工作不在同一网络内
- sql - 防止在 AWS Glue 中多次处理文件
- windows - 使用批处理脚本在多个文件上搜索文本,如果在其中找到文本,则重命名文件
- python - Pyinfra 缺少位置参数
- android - 以编程方式为 AnimatedVectorDrawable 和 Compat 设置持续时间和 startOffset
- javascript - 我不断收到 TypeError: Cannot read property 'find' of undefined