当前位置: 首页 > 知识库问答 >
问题:

反应原生 socket.io 发出/打开不起作用

逄宁
2023-03-14

大家好,我正在与RN一起学习一个简单的聊天应用程序

我在服务器代码中检查了连接与连接事件的连接服务器也可以获取我的套接字ID

但是,任何发射或开启都不起作用。

这是我的服务器代码

var http = require('http');
var express = require('express'),
app = module.exports.app = express();
console.log("serverStarted");
var server = http.createServer(app);
const io = require('socket.io')(server);
server.listen(3000);  //listen on port 80
io.on('connection',function(socket){
    console.log("Client Connected."+socket.id);
    socket.on('Button',function(data){
        console.log("ButtonPressed");
    });
    socket.emit('userid',socket.id);
});

这是客户端代码

import React, { Component } from 'react';
import {
  Button,
  Alert,
  Platform,
  StyleSheet,
  Text,
  View
} from 'react-native';
import SocketIOClient from 'socket.io-client';

let socket;
type Props = {};
export default class App extends Component<Props> {
    constructor(){
    super();
    socket = SocketIOClient('http://myip:3000');
    Alert.alert("Socket is Connected.");
    socket.on('userid',(id)=>{
      this.setState({userid:{id}});
      Alert.alert(id);
    })
  }

  state = {
    userid:"id"
  }
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}>
          Welcome to React Native!
        </Text>
        <Button title = "pres" onPress={()=>{
    socket.emit('Button',"button");
    }}>
          </Button>
        <Text style={styles.instructions}>
          {this.state.userid}
        </Text>
        <Text style={styles.instructions}>
          {instructions}
        </Text>
      </View>
    );
  }
}

有了这段代码,当我按下按钮时,我认为socket.on在服务器上工作

此外,当套接字在服务器中连接时,客户端会更改渲染中的文本。

但两者都不起作用。

请帮帮我...

共有2个答案

居飞扬
2023-03-14

首先转到你的项目根目录并安装

npm i套接字. io-客户端

import SocketIOClient from 'socket.io-client';


constructor(props) {

    super(props);

    //use your own local ip
     this.socket = SocketIOClient('http://localhost:9000/');

     this.socket.on('response', (messages) => {
      Alert.alert("response." + JSON.stringify(messages));
      console.log("response" + JSON.stringify(messages));
    });
  }
  componentDidMount(){
      this.socket.emit('Request_name', '1');
  }
董良策
2023-03-14

我发现问题。。。。。

Socket.io更新了,所以我需要替换

import io from 'socket.io-client' 

import io from 'socket.io-client/dist/socket.io';
 类似资料:
  • 问题内容: 我试图将onscroll事件处理程序添加到特定的dom元素。看下面的代码: 代码非常简单,如您所见,我想处理div#list滚动。当我运行此示例时,它不起作用。所以我尝试直接在render方法上绑定this._handleScroll,它也不起作用。 因此,我打开了chrome inspector,直接使用以下命令添加了onscroll事件: 它正在工作!我不知道为什么会这样。这是Re

  • 问题内容: 为什么colspan属性在React中不起作用?我创建了呈现以下内容的简单组件: 编辑:解决 这是解决方案。React期望属性名称为 colSpan ,而不是colspan。在浪费了荒谬的时间去发现这个小小的邪恶事实之后,想出了这一点。 问题答案: 来自React的DOM差异文档: 所有DOM属性和属性(包括事件处理程序)都应包含驼峰,以与标准JavaScript样式保持一致。 如果您

  • 我试图设置与React Native在Android上。做了一些研究,看起来我应该使用Interceptor。我找到的一个例子解释了如何做到这一点(链接),但我不确定如何注册拦截器。 因此,为了设置,我使用这个类: 那么剩下的就是注册上面的拦截器,那么它应该在哪里完成呢?可能在? 我在构建应用程序时没有收到任何错误,因此我认为应该很好-只需要让应用程序使用它。 更新:我当前正在尝试在中注册拦截器,

  • 我在playstore有一个11K的应用程序。该应用程序是本地Java的。我做了一个react原生应用程序与相同的包名,并更改了jks密钥到密钥存储文件和更改了版本代码。我正在使用的应用程序存储jks文件,我得到这个错误,我知道通过卸载解决,但我不能告诉用户卸载,有没有其他方式执行失败的任务':app:installrelease'。 com.android.builder.testing.api

  • 我使用react native创建了一个应用程序,我正在尝试生成apk。在做了医生的每件事之后http://facebook.github.io/react-native/docs/signed-apk-android.html#content.出现错误,说明无法读取脚本react native\react。因为它不存在。 这是错误

  • **构建失败** 安装build/build/products/debug-iphonesimulator/rn_demo.app处理命令时遇到错误(Domain=nsposixerrordomain,code=2):安装请求的应用程序失败,在提供的路径上找不到应用程序包。提供到所需应用程序包的有效路径。打印:条目“:cfbundleidentifier”不存在 命令失败:/usr/libexec