【发布时间】:2020-05-15 05:24:36
【问题描述】:
我正在使用带有 nextJS 的 socket.io。在服务器中,我正在监听“连接”事件。 现在,当我启动客户端站点时,服务器中的连接事件会触发无限组。
//客户端中的pages/index.js
import Head from 'next/head'
import { useState, useEffect } from 'react'
import io from 'socket.io-client'
export default function Home() {
const [ users, setUsers ] = useState(0);
const socket = io();
useEffect(() => {
socket.on('user', (count) => {
console.log(count)
setUsers(count)
})
return () => {
socket.disconnect();
}
}, [])
return (
<div className="container">
<Head>
<title>Create Next App</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<p>Online Users: {users}</p>
</div>
)
}
//基于类
class Index extends React.Component {
state = {
users: 0,
roomList: []
}
componentDidMount(){
this.socket = io();
this.socket.on('user', count => {
this.setState({users: count})
})
this.socket.on('roomList', rooms => {
this.setState({roomList: rooms})
})
}
componentWillUnmount(){
console.log('unmounted')
this.socket.disconnect();
}
render(){
return(
<div>
<p>Online Users: {this.state.users}</p>
<div>
{ this.roomList && this.roomList.length !== 0 &&
this.roomList.map(room => (
<li key={room}>{room}</li>
))
}
</div>
</div>
)
}
}
export default Index;
谁能帮我弄清楚为什么它不适用于功能组件?
【问题讨论】:
-
请将代码贴在您使用的地方
Home -
@VivekDoshi 在文件夹下的 next.js 文件中,Pages 充当单独的页面。并且名为“index.js”的文件充当根页面“/”。希望你明白我的意思。