socket.io-client 中的 UseEffect 清理

问题描述 投票:0回答:1
useEffect(() => {
  if (authUser) {
    const socket = io("http://localhost:5000", {
      query: {
        userId: authUser._id,
      },
    });

    setSocket(socket);

    socket.on("getOnlineUsers", (users: string[]) => {
      setOnlineUsers(users);
    });

    // the error disappeared when removing this line
    return () => socket.close();

  }
  else {
    if (socket) {
      socket.close();
      setSocket(null);
    }
  }
}, [authUser, socket]);

我收到这个奇怪的错误说明

Argument of type '() => (() => Socket<DefaultEventsMap, DefaultEventsMap>) | undefined' is not assignable to parameter of type 'EffectCallback'.
  Type '(() => Socket<DefaultEventsMap, DefaultEventsMap>) | undefined' is not assignable to type 'void | Destructor'.
    Type '() => Socket<DefaultEventsMap, DefaultEventsMap>' is not assignable to type 'void | Destructor'.
      Type '() => Socket<DefaultEventsMap, DefaultEventsMap>' is not assignable to type 'Destructor'.
        Type 'Socket<DefaultEventsMap, DefaultEventsMap>' is not assignable to type 'void | { [UNDEFINED_VOID_ONLY]: never; }'

我不完全理解这个错误。请问有人可以帮我解决这个问题吗?预先感谢您。

reactjs typescript socket.io tslint
1个回答
0
投票

这是

useEffect
内部回调的类型。 useEffect 回调的返回值应该是

1:返回 void 类型的函数

enter image description here

  1. Destructor
    ,也只允许返回
    void

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.