socket.io useEffect清理函数react

Bas*_*rky 1 socket.io reactjs use-effect

我在组件内调用 socket.on 函数,但我想在组件卸载时停止它,我正在使用功能组件。

useEffect(() => {
    socket.on("new-chat-message", (firstname, lastname, content, date) => {
      dispatch(
        addMessage({
          firstname: firstname,
          lastname: lastname,
          content: content,
          date: date,
        })
      );
    });
  }, [dispatch, socket]);
Run Code Online (Sandbox Code Playgroud)

我需要知道如何设置这个useEffect的清理功能。

Pim*_*Web 5

正如此处文档中所解释的

useEffect(() => {
    const callback = (firstname, lastname, content, date) => {
      dispatch(
        addMessage({
          firstname: firstname,
          lastname: lastname,
          content: content,
          date: date,
        })
      );
    }

    socket.on("new-chat-message", callback);

    return () => {
       socket.off("new-chat-message", callback);
    }
}, [dispatch, socket]);
Run Code Online (Sandbox Code Playgroud)