Я создал клиент веб-чата с использованием веб-сокета, реагирующего хука, реагирования функциональных компонентов и машинописного текста.
Мои вопросы заключаются в том, что он генерирует новый запрос веб-сокета после клиента, который создается функциональным компонентом реакции с перехватом, отправка или получение сообщения другому клиенту, который также построен с помощью перехватчика реакции с функциональным компонентом. Я наблюдаю эту ситуацию на вкладке сети с фильтрацией websocket в инструментах разработчика браузера. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * *} * * * * * * * тогда во время 'i отправка и получение сообщений.
Вы можете прочитать код App.tsx
из моего репозитория github . Ниже приведена выдержка из App.tsx
для клиента типа реагирующего подключения:
export const App: React.FC<{}> = ({}) => {
const [messages, setMessages] = useState<MessageType[]>([]);
const testValue = { messages, setMessages };
const ws = useRef(new WebSocket(URL));
const renderCount = useRef(0);
const submitMessage = (msg: MessageType) => {
ws.current.send(JSON.stringify(msg));
addMessage(msg);
};
const addMessage = (msg: MessageType) => {
setMessages([...messages, msg]);
};
// websocket onmessage
useEffect(() => {
ws.current.onmessage = (msg) => {
const message = JSON.parse(msg.data);
message.isMe = false;
addMessage(message);
};
console.log(`hello`);
});
// close websocket
useEffect(() => {
return () => {
ws.current.close();
};
}, [ws]);
return (
<StylesProvider injectFirst>
<div className="App" css={appStyle}>
<AppBar position="sticky">
{console.log(`renderCount: ${(renderCount.current += 1)}`)}
{/* debug */}
<Toolbar>
<IconButton edge="start" color="inherit" aria-label="menu">
<MenuIcon />
</IconButton>
<Typography variant="h6">聊天室</Typography>
</Toolbar>
</AppBar>
<MessageHistory messages={messages} />
<ChatInput submitFC={submitMessage} />
</div>
</StylesProvider>
);
};
Ниже приведены снимки экрана двух локальных клиентов:
Получатель:
Отправитель:
Хранилище другой клиентской версии, созданной компонентом класса реакции, находится в моего репозитория github .
Репозиторий сервера чата находится на моем github другом хранилище