Socket.io в React не слушает через один раз - PullRequest
0 голосов
/ 29 октября 2019

У меня есть два компонента, оба они разделены. Я должен отправить данные из component1 в component2 через сокеты. Но мой component2 прослушивает событие только один раз, через одно время он не прослушивает событие

Component1

class Component extends React.component{
     socket = socketIOClient("http://localhost:5000")

    sendData = () =>{
          socket.emit("newData", {somedata})
     }

     render() {
          return(
         <button onClick={this.sendData} >Send</button>
     }) 

}

Component2

class Component2 extends React.Component{
    constructor(props) {
        super(props)
        this.state = {data}
    }

    socket =  socketIOClient("http://localhost:4000")

    componentDidMount() {
        socket.on("newData", data =>
         this.setState(data)
    )}

    render(){
         return(<h1>{this.state.data.someAttribute} <h1/>)
   }
}

Сервер

const io = socketIO(server)
io.on("connection", socket =>{
     socket.on("newData", data=> socket.emit("newData"))
 })

Компонент1 отправляет данные на сервер любое количество раз (проверяется путем входа в консоль сервера), но Компонент2 получает данные только в первый раз.

1 Ответ

0 голосов
/ 29 октября 2019

Нашел решение,

Ошибка на стороне сервера.

Мы должны использовать реальный объект io для передачи событий в другие сокеты, которые подключены к серверу.

Таким образом, на стороне сервера, будет

const io = socketIO(server)
io.on("connection", socket =>{
    socket.on("newData", data =>{
        io.sockets.emit("newData", data) //changed this line
   })

})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...