2019 年 3 月 26 日更新
我试图让用户能够将事件添加到日历中,并让这些事件在输入时出现。我正在使用 React.js 前端,并且可以让事件在新日历中呈现,但它不会删除旧日历(我最终会得到 10 多个相互叠加的日历)。
我尝试使用该.destroy()
方法,然后重新渲染日历,但该方法似乎不可用/无法正常工作,所以我想我会尝试rerenderEvents()
保留相同的日历对象,但该功能似乎也无法访问。希望熟悉FullCalendar v.4的任何人帮助解决这个问题
一旦用户将收集到的数据输入到数据对象中并将其附加到状态中,但如果我只是镜像上述内容,它会在旧日历之上呈现一个全新的日历。
就像我无法在渲染后获取 Calendar 对象以进行这些方法调用,但在单独的函数中捕获它时遇到了麻烦。所有文档都说是调用.destroy()
或调用.rerenderEvents()
而不是调用它们。
//This successfully Renders
componentOnMount() {
var calendarNew = document.getElementById('calendar');
let newCalendar = new Calendar(calendarNew, {
plugins: [ dayGridPlugin, timeGridPlugin, listPlugin ],
events: this.state.events
});
console.log(newCalendar)
await this.setState({ calendarObj: newCalendar })
// let myNewEvents = newCalendar.getEvents()
// console.log(myNewEvents)
// let stateEvents = this.state.calendarObj.getEvents()
// console.log(stateEvents)
this.state.calendarObj.render();
}
我尝试了以下方法来减轻双重渲染......
async handleNewEvent() {
// code that creates an object and sets the state to the new event array//
var newEventArr = existingEvents.concat(newEvent)
console.log(newEventArr)
await this.setState({ events: newEventArr })
await this.setState({ currentIndex: (this.state.currentIndex + 1) })
this.props.change(this.state.events, this.state.currentIndex)
//Contains the new event array in the console
console.log(this.state.events)
this.state.calendarObj.rerenderEvents();
}
但这无济于事。我什至无法从handleNewEvent() 中渲染(),因为它看起来好像状态无法在其中保存函数,并且我找不到将函数从ComponentDidMount() 传递给handleNewEvent() 的方法。我不知所措...