我试图在socket上设置状态但是
componentWillMount() {
socket.on('foo', function(msg){
//alert(JSON.stringify(msg));
//this.setState({user:msg});
this.setState({veri:msg});
this.setState({initial:msg});
});
undefined不是一个函数(评估' this.setState({veri:msg })') index.android.js:95:14发出 index.js:133:25 onevent socket.js:270:15 onpacket socket.js:228:19 index.js:21:20发出 index.js:133:25 ondecoded manager.js:345:12 index.js:21:20发出 index.js:133:25添加 index.js:241:16 ondata manager.js:335:19 index.js:21:20发出 index.js:133:25 onPacket socket.js:457:18 socket.js:274:18发出 index.js:133:25 onPacket transport.js:145:12 onData transport.js:137:16 onmessage websocket.js:147:16 dispatchEvent 事件target.js:172:43 WebSocket.js:148:27发出 EventEmitter.js:182:12 __callFunction MessageQueue.js:250:47 MessageQueue.js:101:26 __守护 MessageQueue.js:218:6 callFunctionReturnFlushedQueue MessageQueue.js:100:17
答案 0 :(得分:2)
虽然不可能从你提供的一小部分代码中确切地说出来,但this
内的socket.on
可能是指套接字,而不是React。
您可以尝试使用箭头功能:
socket.on('foo', msg => {
this.setState({veri:msg});
this.setState({initial:msg});
});
您还可以在调用this
之前将self
设置为某些内容(例如socket
),然后在内部使用self
代替this
:
const self = this;
socket.on('foo', function(msg){
this.setState({veri:msg});
this.setState({initial:msg});
});
您还可以在处理程序外定义函数,并将其绑定到this
:
const handleFoo = (function(msg){
this.setState({veri:msg});
this.setState({initial:msg});
}).bind(this);
socket.on('foo', handleFoo);
所有这三种方法都是保持this
期望的方式,而不是让它在另一种背景下改变。