2017-06-05 1 views
0

Ich versuche, Zustand nach Buchse auf Funktion zu setzen, sondernreagieren nativen binden diese nicht definierte Funktion

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

}); 

undefiniert ist keine Funktion (Auswertung ‚this.setState ({Veri: msg })‘) index.android.js: 95: 14 emittieren index.js: 133: 25 onevent socket.js: 270: 15 onpacket socket.js: 228: 19 index.js: 21: 20 emittieren index.js : 133: 25 ondecoded manager.js: 345: 12 index.js: 21: 20 gebenausindex.js: 133: 25 hinzufügen index.js: 241: 16 onData manager.js: 335: 19 index.js: 21: 20 emittieren index.js: 133: 25 onPacket socket.js: 457 : 18 socket.js: 274: 18 emittieren index.js: 133: 25 onPacket transport.js: 145: 12 onData transport.js: 137: 16 onMessage websocket.js: 147: 16 dispatch Event- target.js: 172: 43 WebSocket.js: 148: 27 emittieren EventEmitter.js: 182: 12 __callFunction MessageQueue.js: 250: 47 MessageQueue.js: 101: 26 __guard MessageQueue.js: 218: 6 callFunctionReturnFlushedQueue MessageQueue.js: 100: 17

+1

Was ist 'this'? – PeterMader

+0

das ist reagieren native – user8026867

+0

Er meint, es ist nicht genug Code sichtbar, um richtig zu bestimmen, was "das" ist. Sie denken vielleicht, dass es Native oder Native Reaction sein soll, aber da 'setState' nicht definiert ist, ist 'das' nicht das, was Sie denken. – samanime

Antwort

2

Während es nicht möglich ist endgültig aus dem kleinen Stück Code sagen Sie zur Verfügung gestellt, ist es wahrscheinlich, dass this innerhalb von socket.on auf das bezieht Sockel, nicht reagieren.

Sie können entweder versuchen, einen Pfeil Funktion:

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

Sie auch this auf etwas setzen könnte (wie self) vor socket Aufruf, dann verwenden self statt this innen:

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

Sie können die Funktion auch außerhalb des Handlers definieren und an this:

binden
const handleFoo = (function(msg){ 
    this.setState({veri:msg}); 
    this.setState({initial:msg}); 
}).bind(this); 

socket.on('foo', handleFoo); 

Alle drei sind Möglichkeiten, this zu halten, was Sie erwarten und nicht in einem anderen Kontext ändern.

+0

ja, es funktioniert dank – user8026867

Verwandte Themen