问题描述
我正在试图找出当api返回更改数据时如何更新存储。 当其他用户向api写入数据时,我的一个组件应该呈现“实时”数据。 什么是最好的方法? 间隔轮询异步数据?
我正在使用ReactJS / AltJS,现在我正在使用jQuery在我的Actions中进行异步api调用。
谢谢!
BookActions.js:
getBook(bookId) {
$.ajax({ url: '/api/books/' + bookId })
.done((data) => {
this.actions.getBookSuccess(data);
})
.fail((jqXhr) => {
this.actions.getBookFail(jqXhr);
});
}
BookStore.js
import alt from '../alt';
import BookActions from '../actions/BookActions';
class BookStore {
constructor() {
this.bindActions(BookActions);
this.books = [];
}
onGetBookSuccess(data) {
this.books = data;
}
onGetBookFail(errorMessage) {
toastr.error(errorMessage);
}
}
export default alt.createStore(BookStore);
1楼
首先,您必须定义什么是“实时”数据。 在用户将一些数据写入服务器后,您需要等多久才知道有新数据? 如果您希望在1秒内收到通知,还需要仔细设计后端系统。
在你的问题中,我认为几秒钟的延迟是可以容忍的。
其中一个简单的解决方案是轮询。
根据 ,您可以在componentDidMount
创建一个定时器来定期调用API,并清理componentWillUnmount
所有componentWillUnmount
。
不要将计时器逻辑放入可能由man组件共享的操作中。