2017-04-05 2 views
1

私は1つのプロジェクトで反応を覚えてから使用しようとしています。このように、このコントローラからデータをフェッチデータを取得するときにsetIntervalを使用する必要がありますか?

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

そして、もう一つの成分::私はJSONを出力コントローラ(レールで)持って

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

をそれは、このデータを提示することは難しいことではありませんが、最高のは何ですか管理者にこのデータを表示させる方法はありますか? たとえば、管理者にユーザーの削除を許可する必要があります。私は、サーバーに要求を送信し、1人のユーザーを削除する方法を知っている:

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

... 

しかし、同じリストまたはテーブルで作業してユーザーを削除する2管理者がある場合は?私がredirect_to /some/index.htmlを使用して反応する前に、サイトがリフレッシュされ、管理者がデータベースの現在の状態を確認しました。私は今、サイト全体のリフレッシュを避けるためにしようとしていると私の最初に考えたのは、第二の各半分のデータをフェッチすることでした:

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

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

今すぐ管理者がそれぞれ0.5秒、DBへのリクエストを行い、現在のデータを取得するが、これをあります本当に良い解決策ですか?

+3

まあ、サーバーからのデータでサイトを自動的に更新するには、ポーリングソリューション(これまでのことです)をセットアップするか、WebSocketを使用する必要があります。 –

+1

私の提案はWebSocketベースのソリューションを使用することです。これはサーバー側で変更が発生するたびに管理画面を更新します。 SignalR for .NETベースのソリューションか、Javaベースのソリューション用のsocket.jsを見てください。 – Knitesh

+1

私は他の2つのコメントで前に言ったことを言いますが、ソケットはあなたの友人になると思います。 –

答えて

1

データの性質によって異なります。あなたのユーザーが最新のものを見ることが重要であるかなり動的なデータを扱っているなら、ええ、すべての更新をプッシュするwebsocket接続を設定することを示唆するコメントは良い考えです。

しかし、それを頻繁に変更しないデータを扱っているのであれば、おそらく過剰です。ユーザーが既に削除されているユーザーを削除/編集しようとするシナリオになりますか?はい、しかし、それは非常にまれである可能性が高く、これらの状況は適切なステータスコードを送り返し、あなたのUIで処理することによって処理できます。

関連する問題