React では、多くの場合、単方向フローが最適な方法です。これを実現するには、イベント エミッターを使用する必要があります。
Websockets、SSE、またはポーリングを使用してサーバーから JSON を取得します (問題ありません)。封筒形式である必要があります。これは、チャット アプリケーションの例です。
{
"type": "new-message",
"payload": {
"from": "someone",
"to": "#some-channel",
"time": 1415844019196
}
}
サーバーからこのメッセージを受け取ると、それをイベントとして発行します。
var handleMessage = function(envelope){
myEventEmitter.emit(envelope.type, envelope.payload);
};
これは一種のディスパッチャーです。単純にイベントを取得し、関心のある人にブロードキャストします。通常、利害関係者はコンポーネントまたはストア (流動的) になります。
var MessageList = React.createClass({
componentDidMount: function(){
myEventEmitter.on('new-message', this.handleNewMessage);
},
handleNewMessage: function(message){
if (message.to === this.props.channel) {
this.setState({messages: this.state.messages.concat(message)});
}
},
componentWillUnmount: function(){
myEventEmitter.removeListener(this.handleNewMessage);
},
...
});
ユーザーがメッセージを送信すると、'user-new-message' イベントを発行します。実装するコードの同じ部分は、handleMessage
このイベントをリッスンし、サーバーにメッセージを送信し、UI を更新できるように新しいメッセージ イベントを発行します。
受信したメッセージのリストをコード内 (コンポーネント内ではなく) に保持したり、サーバーから最近のメッセージを取得するように要求したりすることもできます。
サーバーから html を送信することは、通常、非常に良くない、柔軟性に欠ける、パフォーマンスの低いアイデアです。AJAX はクライアントにデータを取得するためのものであり、クライアントはこのデータをユーザーに提示する方法を選択します。