我在用Phonegap+React开发一个应用程序.js和套接字.伊奥.然而,后来React Native被释放了,这个Native的感觉非常棒.

我试着go 拿插座.io客户端与React Native一起工作,但不幸的是没有太多成功.我做了一些研究,我得到了与本期所描述的完全相同的错误:https://github.com/facebook/react-native/issues/375

关于这个问题的 comments 称,他们试图使用fetch API来获取JS模块,但我认为我做得不对:

var socketScript;    
fetch('https://cdn.socket.io/socket.io-1.2.0.js')
    .then(function(response) {
        socketScript = response._bodyText;
    }).done(function() {
        var socket = socketScript.io();
    });

这将返回一个undefined is not a function.

有办法做插座吗.io客户端是否与React Native一起工作?还是我看错了?也许还有其他更合适的解决方案?

推荐答案

对于像我这样在这个问题上跌跌撞撞寻找如何集成套接字的人.io与react native保持一致.

由于React Native支持websockets的时间很短,现在可以使用Socket轻松设置web套接字.伊奥.你所要做的就是

  1. npm安装插座.io客户端
  2. 第一次导入react 本机
  3. 分配window.navigator.userAgent = 'react-native';
  4. 导入套接字.io客户端/套接字.木卫一
  5. 在你的构造函数中指定this.socket = io('localhost:3001', {jsonp: false});

所以总的来说,npm安装插座后应该是这样的.io客户端:

import React from 'react-native';

// ... [other imports]

import './UserAgent';

import io from 'socket.io-client/socket.io';

export default class App extends Component {
  constructor(props) {
    super(props);
    this.socket = io('localhost:3001', {jsonp: false});
  }

  // now you can use sockets with this.socket.io(...)
  // or any other functionality within socket.io!

  ...
}

然后是用户代理.js':

window.navigator.userAgent = 'react-native';

注意:因为ES6模块导入被提升,所以我们不能在与react native和socket相同的文件中进行userAgent分配.io导入,因此是单独的模块.

编辑:

上述解决方案应该可以工作,但在这种情况下,它不会try 创建单独的socketConfig.js文件.在有了输入之前,需要输入任何东西,包括window.navigator.userAgent = 'react-native';中需要输入的东西.io客户端.然后你可以连接你的插座,让所有的监听器都在一个地方.然后,可以将操作或函数导入配置文件,并在侦听器接收数据时执行.

React-native相关问答推荐

Reaction-Native-pdf文件不是PDF格式或已损坏

在我的 React Native 应用程序中获取数据返回 [object Object] 而不是 renderSectionHeader

无法执行 JS 调用:__fbBatchedBridge 未定义

在react-native 应用程序中使用中继

React 从 babel 6 到 babel 7 的原生升级

在 React 中使用 Lodash debounce 来防止在用户输入时请求数据

带有 SafeAreaView-wrapper 的 react-native Modal 不起作用

React Native - 用分机拨打电话号码

mapDispatchToProps:有什么意义吗?

在 Docker 中使用 Fastlane 构建 iOS 应用

Jest 的配置在更新到 26.x 后抛出type ErrorHandler = (error: mixed, isFatal: boolean) => void

React native + redux-persist:如何忽略键(黑名单)?

如何将 BuildConfig 值传递给依赖模块?

React Native 元素,未生成 index.ios.js 或 index.android.js

我们可以在 react webapp 和 react native 应用程序之间共享代码吗,并且可以在 react-native 生产环境中使用

react-native:多色文本视图

你好世界! React Native 程序在 Mac 上抛出Could not parse the simulator list output

如何在 React Native 上隐藏 createStackNavigator 的标题?

react-native:如何覆盖组件中定义的默认样式

StackNavigator中如何改变动画的方向?