質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

2回答

3216閲覧

ReactJSで外部(アプリ等)からのRestAPIにて画面更新をする方法

ricy

総合スコア48

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2016/05/28 02:14

Reactを勉強している者です。どうか助言いただけると助かります。

公式チュートリアルをみていて疑問があったので投稿します。
>次のコードではシンプルなポーリングをしていますが、WebSockets や他の方法でも簡単に実現できます。
とありますが、別の方法をしりたいです。

要件としてはアプリ等、外部(アプリ等)からRestAPIでJson形式でPOSTされたときに自動で画面を更新したいです。
そのPOSTは具体的にはユーザDBに登録です。
チュートリアルのように2秒ごとにajaxで取得するのもよいかもしれませんが、
ユーザ登録でDBが更新されたことをイベントとして画面更新したいです。
サーバサイドはRailsでapiに徹しています。
質問がざっくりですみませんが、サンプルコードがあればお願いしたいです。

次のコードではシンプルなポーリングをしていますが、WebSockets や他の方法でも簡単に実現できます。
var CommentBox = React.createClass({
loadCommentsFromServer: 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)
});
},
getInitialState: function() {
return {data: []};
},
componentDidMount: function() {
this.loadCommentsFromServer();
setInterval(this.loadCommentsFromServer, this.props.pollInterval);
},
render: function() {
return (
<div className="commentBox">
<h1>Comments</h1>
<CommentList data={this.state.data} />
<CommentForm />
</div>
);
}
});

ReactDOM.render(
<CommentBox url="comments.json" pollInterval={2000} />,
document.getElementById('content')
);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

そのような場合はやはりWebsocketが最適だと思います。

  1. クライアント側起動時にサーバのsocketに接続
  2. サーバ(Rails)側で、DBが更新されたらemit
  3. クライアント(React)側でそのイベントをonで受け取ってstateを更新

で実現出来るかと。

投稿2016/07/22 09:55

k.tada

総合スコア1679

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

手前味噌の記事ですが、これと同じことかな?
React使ってSPAを作るよ(17)

私も勉強中なのでこの記事を書いたときは2秒ごとに変数をチェックさせてましたが、今思えば再レンダリングが走るようなfunctionを外に作っておいて、ajaxでPOSTしたあと、.done()の時点でそれを呼び出す、とかでできる気がします。

投稿2016/07/22 08:03

編集2016/07/22 08:10
NatsumiOki

総合スコア1298

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問