如何从WebSocket回调访问React中的组件方法
How to access component method in React from a WebSocket callback
我对Javascript和React有问题。我想基于来自WebSocket的推送消息来更改组件状态。
我的问题是,我不知道如何从WebSocket回调中调用函数handlePushMessage
。这是代码:
const MainPage = React.createClass({
...
componentDidMount: function() {
var connection = new WebSocket('ws://localhost:12345');
connection.onmessage = function (e) {
var jsonData = JSON.parse(e.data);
handlePushMessage(jsonData);
};
},
handlePushMessage: function(data) {
...
}
}
我尝试了不同的语法来指定该函数,并尝试通过this
访问该函数。然而,一切都无济于事。有什么想法吗?
尝试使用它(在回调之前保存):
const MainPage = React.createClass({
...
componentDidMount: function() {
const connection = new WebSocket('ws://localhost:12345');
const that = this;
connection.onmessage = function (e) {
const jsonData = JSON.parse(e.data);
that.handlePushMessage(jsonData);
};
},
handlePushMessage: function(data) {
...
}
}
说明:在回调中,this指的是连接对象,而不是您创建的类。
一个正在工作的jsFiddle示例:https://jsfiddle.net/esnuxz81/3/
这也应该起作用:
const MainPage = React.createClass({
...
componentDidMount: function() {
var connection = new WebSocket('ws://localhost:12345');
connection.onmessage = this.handlePushMessage;
},
handlePushMessage: function(e) {
var jsonData = JSON.parse(e.data);
...
}
}
也许您可以考虑切换到"通量"模式。在将数据"持久化"到存储区的地方,然后将存储区连接到组件(例如通过react-redoux)。通过这种方式,您的组件是服务层的不可知论者,重要的是它们的道具,无论它们来自哪里。
相关文章:
- react组件中的绑定方法
- Angular2将组件方法导入到另一个组件中
- 从vuejs中的组件模板访问父方法
- 在React中将方法从一个组件移动到另一个组件,并且仍然可以在原始组件中使用
- 如何从Vue.js中的子组件访问父方法
- Redux-组件不同的方法(智能/哑点/容器/演示)
- 组件之后子元素中的某个方法DidMount in parrent 元素
- bind():您正在将一个组件方法绑定到该组件.React会自动为您执行此操作
- Emberjs-如何在组件方法中获取当前路由器路径
- EmberJS - 使用几个解决方案从外部调用组件方法(呼吁讨论)
- ReactJS以正确的方式绑定组件方法
- 如何从WebSocket回调访问React中的组件方法
- Angular 1.5组件方法templateUrl+函数
- React组件方法this.state.myState从child返回后未定义
- 在React中暴露组件方法
- finddomnode(组件)方法列表
- 用Sinon存根一个React组件方法
- 在ReactJs组件方法调用之间存储变量
- 我只能在使用Angular2 Universal的客户端中运行组件方法吗
- 在 constructor() 中绑定许多 React 组件方法的上下文的正确约定是什么?