【发布时间】:2016-04-14 04:42:34
【问题描述】:
我是 react.js 的新手。我用 react.js 创建了一个网页,它从 json 文件(文件在服务器上)获取数据并显示它。
我希望 json 文件中的更改应该反映在网页中而无需重新加载页面,所以我使用了以下代码:
(这不是完整的代码)
getInitialState: function() {
return {data: []};
},
componentDidMount: function() {
this.loadFromServer();
setInterval(this.loadFromServer, 2000);
}
和 loadFromServer():
loadFromServer: function() {
$.ajax({
url: this.props.url,
dataType: 'json',
cache: false,
success: function(data) {
this.setState({data: data});
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
}
效果很好。
但我面临的问题是,即使数据没有变化,它也会每 2 秒继续获取 json 文件数据。
这里的文件大小只有 8.28 KB,但以后会增加。我想要一个解决方案,它应该仅在数据发生更改时才从服务器上的 JSON 文件中获取数据。我正在使用 Nodejs (express) 实现服务器。
【问题讨论】:
-
我认为 setInterval(this.loadFromServer, 2000);是每 2 秒调用一次服务的原因
-
是的,我这样做是为了不断地从服务器获取文件。但我想要一个条件来限制这种获取。我希望它只在服务器上的 json 文件发生一些变化时才获取文件。
-
那么我认为在服务器通过诸如socket.io之类的方式通知客户端更改之前是没有办法的。否则,您可以创建一个小服务,每 2 秒连续 ping 服务器一次,并根据响应尝试调用实际服务,而不是每次都调用它并重新绘制客户端,这是一项繁重的任务。