作为序言,我还是React的新手,所以我仍然在摸索着自己的方式。
我所拥有的是一个获取数据以呈现HTML表的组件。因此,我在fetchData()
内调用我的操作'fetch()
(使用浏览器的componentWillMount()
API),其中还有一个用于更改商店的监听器。这一切都运行良好,我能够检索和呈现数据。
现在下一步。我希望能够在组件的props更新时获取新数据。但我不确定这样做的正确方法是什么。所以我有一个三部分问题
fetchData()
找到componentWillReceiveProps()
新道具的适当位置会不会?isLoading
布尔值的东西之外,有没有办法确保只有一个fetch正在运行? 答案 0 :(得分:1)
是的,componentWillReceiveProps
是适当的地方。
关于第2点和第3点:
取消任务并保持“一次运行”的想法似乎不够。我不认为这种解决方案应该在任何系统中使用,因为实现会限制应用程序的设计效率。
是否可以取消旧的获取并启动新的获取,或者至少实现逻辑以忽略原始结果并等待较新获取的结果?
为什么不让'较新的获取'响应覆盖'旧的获取'响应?
如果你真的想避免显示旧的响应,你只需使用所有fetchData调用的计数器就可以实现它。您可以通过以下方式实现它:
var ApiClient = {
processing: 0,
fetchData: function(){
processing++
return yourLibForHTTPCall.get('http://endpoint').then(function (response)){
processing--
return response
}
},
isIdle: function(){
return processing == 0
}
}
以及实际拨打电话的地方:
apiClient.fetchData(function(response){
if(apiClient.isIdle()){
this.setState({
})
}
}
我希望yourLibForHTTPCall.get
在您的案例中返回Promise。