2017-06-05 63 views
0

我试图在功能插座后设置状态,但反应本地绑定这个未定义功能

componentWillMount() { 
socket.on('foo', function(msg){ 
//alert(JSON.stringify(msg)); 
//this.setState({user:msg}); 
this.setState({veri:msg}); 
this.setState({initial:msg}); 

}); 

不确定是不是一个函数(评估'this.setState({VERI:味精 })) 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 emit index.js:133:25添加 index.js:241:16个昂达 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个昂达 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 __guard 个MessageQueue.js:218:6 callFunctionReturnFlushedQueue MessageQueue.js:100:17

+1

这是什么? – PeterMader

+0

这是反应原生 – user8026867

+0

他的意思是,没有足够的代码可见,以正确确定什么'this'。你可能认为它应该是React Native或者其他东西,但是由于'setState'没有定义,所以'this'不是你想象的那样。 – samanime

回答

2

虽然它不可能从你提供的代码的小块决定性地告诉,很可能是this内的socket.on是指套接字,而不是反应。

你既可以尝试使用箭头功能:调用socket

socket.on('foo', msg => { 
    this.setState({veri:msg}); 
    this.setState({initial:msg}); 
}); 

您还可以设置this的东西(像self),然后使用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你想要的,而不是让它在另一个上下文中改变的方法。

+0

是的,它的工作原理谢谢 – user8026867