2016-03-24 48 views
2

我有这样的代码[email protected]阵营和本地人使用的WebSockets

import React, { AsyncStorage, Component, View, Text, WebView, WebSocket } from 'react-native'; 
import { Avatar, Divider, Subheader, COLOR } from 'react-native-material-design'; 

export default class Avatars extends Component { 
    _setWebSocket = (endpoint, sessionToken) => { 
     const ws = new WebSocket('wss://' + endPoint + '/api/live?authToken=' + sessionToken); 
     console.log('Setting socket: ' + 'wss://' + endpoint + '/api/live?authToken=' + sessionToken); 

,我从调用代码:

componentDidMount() { 
    this._setWebSocket(endpoint, token); 
} 

我有问题,试图让WebSockets的是作为代码工作:

console.log('Setting socket: ' + 'wss://' + endpoint + '/api/live?authToken=' + sessionToken); 

永远不会被触发。如果我在创建新的WebSocket之前放置了控制台日志,它将运行。我做错了什么,我该如何调试,因为Chrome并没有与Genymotion结合显示有用的信息。

+0

您是否在Genymotion的上下文菜单中使用“远程调试JS”?如果没有,请在控制台中输入'adb logcat *:S ReactNative:V ReactNativeJS:V'来查看日志 – antoine129

+0

我的代码成功实例化了一个WebSocket,但触发了它的'onerror'处理程序,原因不明:/ – antoine129

+0

使用socket.io并且它工作正常:) – antoine129

回答

0

您的语法错误:这里有两种不同的正确的代码方式。

class Avatars extends Component { 
    constructor(props) { 
    super(props) 
    this._setWebSocket = this._setWebSocket.bind(this) 
    } 

    _setWebSocket(endpoint, sessionToken) { 
    const ws = new WebSocket('wss://' + endPoint + '/api/live?authToken=' + sessionToken) 
    console.log('Setting socket: ' + 'wss://' + endpoint + '/api/live?authToken=' + sessionToken) 
    } 

    componentDidMount() { 
    this._setWebSocket(endpoint, token) 
    } 

    render() { 
    // put your code here 
    return (
     <View /> 
    ) 
    } 
} 

export default Avatars 

const Avatars = React.createClass({ 
    _setWebSocket: (endpoint, sessionToken) => { 
    const ws = new WebSocket('wss://' + endPoint + '/api/live?authToken=' + sessionToken) 
    console.log('Setting socket: ' + 'wss://' + endpoint + '/api/live?authToken=' + sessionToken) 
    }, 

    componentDidMount:() => { 
    this._setWebSocket(endpoint, token) 
    }, 

    render:() => { 
    // put your code here 
    return (
     <View /> 
    ) 
    }, 
}) 

export default Avatars 
0

的问题是很容易找到,可能是我累了

import React, { AsyncStorage, Component, View, Text, WebView, WebSocket } from 'react-native'; 

我把WebSocket的需要进口,但这是本机模块... 因此,移除的WebSocket从进口依赖帮助。

+1

如果其他人像我一样被卡住,请彻底删除'WebSocket'导入。这是一个全球性的,根本不需要进口。 @Marceli能从这个答案中删除这行代码吗?这有点误导。谢谢! –

+0

@LaneRettig +1同意 –