javascript - 获取数据时应该使用 setInterval 吗?

标签 javascript ruby-on-rails reactjs

我正在尝试学习 React,然后在一个项目中使用它。我有一个输出 json 的 Controller (在 Rails 中):

...
  def index
    @users = User.order(created_at: :desc)
    respond_to do |format|
      format.json { render json: @users}
    end
  end
...

还有一个组件从该 Controller 获取数据,如下所示:

...
  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)
      });
  };

...

但是如果有两个管理员处理同一个列表或表并删除用户怎么办?在使用react之前,我使用了redirect_to/some/index.html,站点被刷新并且管理员看到了数据库的当前状态。我现在试图避免刷新整个网站,我的第一个想法是每半秒获取一次数据:

...
  tick() {
    this.fetchData()
  };

 componentDidMount() {
    setInterval(()=> this.tick(), 500)
  };
...

现在管理员每 0.5 秒向数据库发出一个请求并获取当前数据,但这真的是一个好的解决方案吗?

最佳答案

这取决于数据的性质。如果您正在处理相当动态的数据,而您的用户拥有最新的事物 View 非常重要,那么是的,建议设置 Websocket 连接来推送所有更新的评论是个好主意。

但是,如果您处理的数据不经常更改,那么它可能就有点过头了。您最终会遇到用户尝试删除/编辑已删除用户的情况吗?是的,但这种情况可能非常罕见,这些情况可以通过发回适当的状态代码并在用户界面中处理它们来处理。

关于javascript - 获取数据时应该使用 setInterval 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43238174/

相关文章:

javascript - 如何在放置后删除jquery可拖动项目的子项

ruby-on-rails - 响应发送到浏览器后在 rails 中执行代码

sql - Rails 中 Postgresql 的准备语句

reactjs - 在 Next.js 上使用 jest 找不到模块错误

Javascript:无法获得整数

javascript - 为什么父元素上的 PreventDefault 会禁用以编程方式检查单击时的子复选框?

ruby-on-rails - Rails : Is it possible to reference a instance variable (like @user. color_preferred) 插入字符串?

reactjs - 将 js 图像 react 为 base64

reactjs - 将 MapBox GL JS 与 React 结合使用 - 错误 : Invalid type: ‘container’ must be a String or HTMLElement

javascript - CSS 在出现特殊字符后设置一些文本样式?