Reactjs 正在将套接字io与react连接,无法获取数据

Reactjs 正在将套接字io与react连接,无法获取数据,reactjs,socket.io,Reactjs,Socket.io,我正在尝试从React连接一个组件,通过socket.io从服务器获取一些实时更新数据 在我的express server中,我有以下功能: (部分但相关部分) 然后,我在客户端有一个helper api.js文件: import openSocket from 'socket.io-client'; const socket = openSocket('http://localhost:3000'); function subscribeToTimer(cb) { socket.on('

我正在尝试从React连接一个组件,通过socket.io从服务器获取一些实时更新数据

在我的express server中,我有以下功能: (部分但相关部分)

然后,我在客户端有一个helper api.js文件:

import openSocket from 'socket.io-client';
const socket = openSocket('http://localhost:3000');

function subscribeToTimer(cb) {
  socket.on('timer', timestamp => cb(null, timestamp));
  socket.emit('subscribeToTimer', 1000);
}

export { subscribeToTimer }
然后,我将此方法导入我的react组件:

import { subscribeToTimer } from './api';
然后,我创建一个状态并尝试更新它:

const [timestamp, setTimeStamp] = useState('no timestamp yet')

  useEffect(() => {
    subscribeToTimer((err, tstamp) => setTimeStamp);
    console.log(timestamp);
  });
在服务器端,我得到控制台日志:

client is subscribing to timer with interval 1000
在客户端it console.logs上:

'no timestamp yet'

我没有从套接字获取更新。知道我做错了什么吗?我正在遵循一个教程,并将其纳入我的react项目。

我相信您的问题就在这里:

useEffect(() => {
    subscribeToTimer((err, tstamp) => setTimeStamp(tstamp));
    console.log(timestamp);
  }

你没有给你的州分配任何东西

我相信你的问题在这里:

useEffect(() => {
    subscribeToTimer((err, tstamp) => setTimeStamp(tstamp));
    console.log(timestamp);
  }

您没有将任何内容分配给您的状态

tstamp
传递给
setTimeStamp
函数,您只是传递函数的引用

试试这个

const [timestamp, setTimeStamp] = useState('no timestamp yet')
  useEffect(() => {
    subscribeToTimer((err, tstamp) => setTimeStamp(tstamp));
    console.log(timestamp);
  });

tstamp
传递给
setTimeStamp
函数,您只是传递函数的引用

试试这个

const [timestamp, setTimeStamp] = useState('no timestamp yet')
  useEffect(() => {
    subscribeToTimer((err, tstamp) => setTimeStamp(tstamp));
    console.log(timestamp);
  });