我正在尝试构建实时聊天消息。在客户端(React),每当有新用户进入聊天时,套接字的事件usuarios-conectados都会被触发(此套接字事件为我提供了当时连接的所有用户的数组)。
然后,我尝试在useState中设置该用户数组,但正因为如此,组件进入循环并不断重新渲染自己。
这似乎是问题所在,因为每当我调用useSocket,控制台时。日志(用户)不断打印连接的用户
import { useEffect, useState } from 'react' import { io } from "socket.io-client"; export const useSockets = () => { const [socket, setSocket] = useState( io('http://localhost:8080', { 'extraHeaders': { 'x-token': localStorage.getItem('x-token') } }) ) const [users, setUsers] = useState([]) useEffect(() => { socket.on('connect', () => { console.log('Sockets online') }) socket.on('usuarios-conectados', (newUsers) => { setUsers(newUsers); console.log(users); }) return () => { socket.on('disconnect', () => { console.log('Sockets offline') }) socket.disconnect() } }, []) return [users] }
您不应该将IO存储在状态中,而是在上下文中调用它,例如,让我在代码中显示。
import React from 'react';
import io from 'socket.io-client';
const SOCKET_ADDR = process.env.REACT_APP_SOCKET_ADDR || '<your server>';
export const socket = io(SOCKET_ADDR, { withCredentials: false, transports: ['websocket'] });
export const SocketContext = React.createContext();
您不应该将io存储在状态中,而是在您的组件中创建一个文件并导入,然后在您初始化套接字本身之后将侦听您定义的事件。让我用代码显示。
//src/utils/socket.js
import io from "socket.io-client"
export const socket = io(process.env.BACKURL);
// component.jsx
import {socket} from './utils/socket'
const [commentData , setCommentData] = useState([]);
useEffect(() => {
socket.on("connect_error", () => {
console.error("socket error!");
socket.close();
});
// websokcet to comments
socket.on("load_comment", (payload) => {
setCommentData(payload);
});
return () => {
socket.close();
}
}, [])
// second useEffect to see if statesChanged
useEffect(() => {
console.log('Changed' , commentData)
} , [commentData])
在连接上创建infinte循环!很奇怪,直到现在才发生。我不知道出了什么问题。我试图重建包,我复制一些代码从旧的源代码和相同的结果...
我在使用useEffect时搜索了很多关于无限循环的帖子,但仍然没有找到答案 在useEffect中,我试图调用get accounts api,当然,我放置了一个空数组,因为我只希望它在渲染后运行一次。但目前我喜欢添加“addAccount”功能。因此,如果我按下add按钮,它就会发送一个post请求。这里是一个问题,我想检查值是否已更改,因此我将值放入第二个参数,即空数组,它会导致无限循环。但
问题内容: 请看下面的Java 无限循环。它导致其下面的语句的编译时错误。 以下相同的无限循环可正常工作,并且不会发出任何错误,其中我只是用布尔变量替换了条件。 同样在第二种情况下,循环之后的语句显然不可访问,因为布尔变量为true,但编译器根本没有抱怨。为什么? 编辑:显然,以下版本的卡在无限循环中,但是即使循环中的条件始终存在,因此循环下面的语句也不会对该语句下的语句发出任何编译器错误,因此循
问题内容: 我一直在使用React 16.7-alpha中的新钩子系统,并且当我正在处理的状态是对象或数组时陷入useEffect的无限循环中。 首先,我使用useState并使用一个空对象启动它,如下所示: 然后,在useEffect中,我再次使用setObj将其设置为空对象。作为第二个参数,我传递了[obj],希望如果对象的 内容 没有更改,它也不会更新。但是它一直在更新。我猜是因为不管内容如
问题内容: 我正在使用第三方库来处理大量数据集。该过程偶尔会陷入无限循环(或被阻塞- 不知道为什么并且无法进入代码)。我想在设定的时间后消除这个问题,然后继续处理下一个案件。一个简单的例子是: processData通常最多需要1秒。我想设置一个计时器,该计时器在10秒后杀死processData() 编辑我将不胜感激代码片段(我没有在使用Thread的过程中练习过)。执行器方法看起来很有用,但我
正如使用boto3完全扫描dynamoDb中所解释的,我构建了一个解决方案,使用某些条件完全扫描dynamoDb表。这是我的代码: 但是当代码被执行时,它会进入一个无限循环。这是LastEvaluatedKey每次迭代的输出: 它一直在这两对之间循环。 编辑: 我添加了do_scan方法。