我真的不明白为什么我的组件不呈现其更改。
toggle() {
var url = rest.appointments + "/appointments";
Request.get(url).then((response) => {
this.setState(prevState => ({
appointments: response.body.map(a => Object.assign({}, a, { end: new Date(a.end), start: new Date(a.start) })),
modal: !prevState.modal
}));
});
}
当我单击用于创建新约会的按钮时,将调用toggle()
方法。在我调用此函数之前,约会是通过以下方法创建的:
(我删除了无关的行)
saveAppointment() {
var url = rest.appointments + "/appointment";
Request.post(url)
.set('Content-Type', 'application/json')
.send('{"end":"' + end + '","start":"' + start + '" ,"title":"' + this.state.title + '","allDay":"false"}')
.end(function(err, res) {
properties.toggle();
});
}
因此properties.toggle()
将调用父组件中的方法toggle()
。创建第一个约会时,该组件不会渲染。 GET呼叫无法获取来自saveAppointment()
的新约会。
但是,如果我再次致电saveAppointment()
,则会显示先前的约会和新的约会。因此,第一个总是不在第一个GET
呼叫的响应中。
在GET
调用中获取新数据时,我需要更改什么?
编辑:我可以通过以下问题来总结:如何在不弄乱我的GET结果的情况下首先进行POST,然后进行GET?
EDIT2:我刚刚看到有时甚至在我第一次尝试时也可以使用。我不知道为什么,但是当我在创建新约会之前稍等片刻,它似乎可以正常工作。
答案 0 :(得分:0)
我认为这是由于缓存而发生的。在控制台中检查“网络”选项卡。如果响应代码为304 (Not modified)
,则浏览器使用了缓存的响应。为避免这种情况,您可以使用cache-control HTTP标头或向请求中添加一些随机的get参数,例如?hash=[any-random-hash]