Javascript 如何使用reactjs合并两个对象数组?
我有一个,我想从后端获取本周的事件,从本地存储获取其他周的事件 我的代码是:Javascript 如何使用reactjs合并两个对象数组?,javascript,arrays,reactjs,local-storage,react-big-calendar,Javascript,Arrays,Reactjs,Local Storage,React Big Calendar,我有一个,我想从后端获取本周的事件,从本地存储获取其他周的事件 我的代码是: componentDidMount() { fetch("url") .then(Response => Response.json()) .then(data => { let evts = data; for (let i = 0; i < evts.length; i++) { evts[i].start = mom
componentDidMount() {
fetch("url")
.then(Response => Response.json())
.then(data => {
let evts = data;
for (let i = 0; i < evts.length; i++) {
evts[i].start = moment(evts[i].start).toDate();
evts[i].end = moment(evts[i].end).toDate();
this.state.evt1.push(evts[i])
}
this.setState({
evt1: evts,
prevEvents : evts
})
})
console.log(this.state.evt1)
const cachedHits = JSON.parse(localStorage.getItem('Evènements'))
console.log(cachedHits)
for (let j = 0; j <cachedHits.length; j++) {
cachedHits[j].start = moment(cachedHits[j].start).toDate();
cachedHits[j].end = moment(cachedHits[j].end).toDate();
this.state.evt2.push(cachedHits[j])
}
this.setState( {
evt2: this.state.evt2
})
this.setState({
events: [...this.state.evt1, ...this.state.evt2]
})
console.log(this.state.events)
}
componentDidMount(){
获取(“url”)
.then(Response=>Response.json())
。然后(数据=>{
让evts=数据;
for(设i=0;i 对于(让j=0;j尝试使用concat
方法,可能会奏效
this.setState({
events: evt1.concat(evt2)
})
由于您正在对服务器进行HTTP调用,因此获取数据需要一些时间。您应该等待HTTP调用的响应,而不是直接设置事件状态。您的代码应如下所示:
componentDidMount() {
fetch("url")
.then(Response => Response.json())
.then(data => {
let evts = data;
for (let i = 0; i < evts.length; i++) {
evts[i].start = moment(evts[i].start).toDate();
evts[i].end = moment(evts[i].end).toDate();
this.state.evt1.push(evts[i])
}
this.setState({
evt1: evts,
prevEvents: evts
})
})
.then(() => {
console.log(this.state.evt1)
const cachedHits = JSON.parse(localStorage.getItem('Evènements'))
console.log(cachedHits)
for (let j = 0; j < cachedHits.length; j++) {
cachedHits[j].start = moment(cachedHits[j].start).toDate();
cachedHits[j].end = moment(cachedHits[j].end).toDate();
this.state.evt2.push(cachedHits[j])
}
this.setState({
evt2: this.state.evt2
})
this.setState({
events: [...this.state.evt1, ...this.state.evt2]
})
console.log(this.state.events)
});
}
componentDidMount(){
获取(“url”)
.then(Response=>Response.json())
。然后(数据=>{
让evts=数据;
for(设i=0;i{
console.log(this.state.evt1)
const cachedHits=JSON.parse(localStorage.getItem('Evènements'))
console.log(cachedHits)
for(设j=0;j
我还建议您在承诺链中使用catch块来处理错误。您可以使用spread操作符合并两个数组
var a = [{fname : 'foo'}]
var b = [{lname : 'bar'}]
var c = [...a, ...b] // output is [{fname : 'foo'},{lname : 'bar'}]
在EVT上添加state.evt1
,然后遍历从fetch获取的数据,对for循环中的当前元素进行更改,将元素推送到EVT,然后将该EVT添加到状态
let evts = this.state.evt1;
for (let i = 0; i < data.length; i++) {
data[i].start = moment(data[i].start).toDate();
data[i].end = moment(data[i].end).toDate();
evts.push(data[i])
}
this.setState({
evt1: evts
})
让evts=this.state.evt1;
for(设i=0;i
这仍然是一个问题,只是evt2
是displayed@burak-gavas可能是一种让我沮丧的方法,你的回答让我很高兴!!仍然对设置状态、对象数组或对象对象的最佳实践感到困惑:(Onvar b
如果我只添加这个var b=[{fname:'other'}]
,请注意,我使用了相同的键。现在,它只是再次与相同的键合并。因此,输出就像:/[{fname:'foo'},{fname:'other'}]
。不确定如何仅更新值。