Redux触发多次

5vf7fwbs  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(108)

当我收到来自套接字的消息时,函数触发一次,但在reducer内部,每次都要触发3-5次

useEffect(()=>{
        socket.on('message', (data) => {
            dispatch({
                type: 'InsertMessage',
                payload: { text: data.Message, sender: data.SenderSeries, timestamp: new Date(), ...data }
            })
            ScrollDown()
        })
    },[])

这里是我监听套接字case 'InsertMessage'的地方:

return [...state, action.payload];`

这是我所有的代码和我的套接字不发送两次我检查它
我在代码中也使用了useDB来调用同样的东西idk做什么

vpfxa7rd

vpfxa7rd1#

useEffect()回调可能会被多次调用,从而导致为同一事件注册多个回调函数。这种情况特别发生在开发模式下,React故意多次调用效果回调来检测这样的bug。
一种解决方案是从useEffect()回调返回一个cleanup函数。React将在设置新效果之前调用它。大概是这样的:

useEffect(() => {
  const callback = (data) => { dispatch(...) };
  socket.on('message', callback);
  return () => {
    socket.off('message', callback);
  };
}, [])

相关问题