重复渲染
'use client';
import { io, Socket } from 'socket.io-client';
import { useEffect, useRef, useState } from 'react';
import Monitor from 'utils/monitor';
const OnlineCount = () => {
const [count, setCount] = useState(0);
const socket = useRef<WebSocket>();
async function initSocket() {
const monitor = new Monitor();
const userId = await monitor.getVisitor();
socket.current = new WebSocket(`ws://localhost:3000/v1/ws?userId=$userId`)
socket.current.onmessage = (event)=>{
const message = event.data;
setCount(message)
}
}
useEffect(() => {
initSocket().then();
return () => {
socket.current?.close();
};
}, []);
return (
<div>
在线人数 <span className='font-mono'>{count}</span>
</div>
);
};
export default OnlineCount;
"use client";
import React, { useEffect, useRef, useState } from 'react';
import Monitor from 'utils/monitor';
const OnlineCount = () => {
const [count, setCount] = useState(0);
const socket = useRef<WebSocket | null>(null);
const userIdRef = useRef<string | null>(null);
useEffect(() => {
async function initSocket() {
if (!userIdRef.current) {
const monitor = new Monitor();
userIdRef.current = await monitor.getVisitor();
}
if (!socket.current) {
socket.current = new WebSocket(`ws://localhost:3000/v1/ws?userId=$userIdRef.current`);
socket.current.onmessage = (event) => {
const message = event.data;
setCount(message);
};
}
}
initSocket();
return () => {
if (socket.current) {
socket.current.close();
socket.current = null;
}
};
}, []);
return (
<div>
在线人数 <span className='font-mono'>{count}</span>
</div>
);
};
export default OnlineCount;
评论区
共有评论 0 条暂无评论