我有一个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 = 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)
}
events
是evt1
(来自后端的事件)和evt2
(来自localstorage的事件)的合并数组,当我运行它时,我进入控制台:evt1是:
evt2是:
但是,在我的日历上,仅显示evt2,而不显示所有事件(evt1和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)
});
}
我还建议您在诺言链中有一个catch块来处理错误。
关于javascript - 如何使用reactjs合并两个对象数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55607431/