使用 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 用于向客户端获取数据,客户端选择如何将这些数据呈现给用户。