我正在尝试学习,然后在一个项目中使用反应。我有一个控制器(在rails中)输出json:
...
def index
@users = User.order(created_at: :desc)
respond_to do |format|
format.json { render json: @users}
end
end
...
一个从这个控制器获取数据的组件如下:
...
fetchData() {
fetch('admin/users.json', {credentials: 'same-origin'})
.then(function(response) {
return response.json()
}).then(function(json) {
this.setState({data: json})
}.bind(this))
.catch(function(ex) {
console.log('parsing failed', ex)
});
};
...
提供此数据并不难,但允许管理员管理此数据的最佳方法是什么? 例如,我必须允许管理员删除用户。我知道如何将请求发送到服务器并删除一个用户:
...
fetchData() {
fetch('admin/users.json', {credentials: 'same-origin'})
.then(function(response) {
return response.json()
}).then(function(json) {
this.setState({data: json})
}.bind(this))
.catch(function(ex) {
console.log('parsing failed', ex)
});
};
...
但是,如果有两个管理员在同一个列表或表上工作并删除用户呢?在我使用redirect_to /some/index.html做出反应之前,网站已刷新,管理员看到了数据库的当前状态。我现在正试图避免刷新整个网站,我的第一个想法是每半秒获取一次数据:
...
tick() {
this.fetchData()
};
componentDidMount() {
setInterval(()=> this.tick(), 500)
};
...
现在管理员每隔0.5秒向db发出一次请求并获取当前数据,但这真的是一个很好的解决方案吗?
答案 0 :(得分:1)
这取决于数据的性质。如果您正在处理相当动态的数据,其中对您的用户来说拥有最新的事物视图非常重要,那么,建议设置websocket连接以推送所有更新的评论是个好主意。
但是,如果您正在处理经常不会改变的数据,那么它可能有点过分。您最终会遇到用户尝试删除/编辑已被删除的用户的情况吗?是的,但它很可能很少发生,可以通过发送适当的状态代码并在你的ui中处理它们来处理这些情况。