簡體   English   中英

ReactJS 回調使用效果掛鈎

[英]ReactJS callback useEffect hook

通過遵循 GetStreamIO 服務的文檔,我試圖在用戶連接到頻道時隱藏頻道消息,以便不會向用戶顯示之前的消息歷史記錄。

const App = () => {

  const [chatClient, setChatClient] = useState(null);
  const [channel, setChannel] = useState(null);

  useEffect(() => {
    const initChat = async () => {
      const client = StreamChat.getInstance(env.API_KEY);

      const _channel = await client.channel('livestream', env.ROOM_NAME);
      setChatClient(client);
      setChannel(_channel)
    };
    initChat();
  }, []);
  
  useEffect(() => {
    const hideChat = async () => {
      if(channel !== null) {
        console.log(channel);
        await channel.hide();
      }
    }
    hideChat(); 
  }, [channel])

  return (
      <Chat client={chatClient}>
        <Channel channel={channel}>
          <Window>
            <VirtualizedMessageList />
          </Window>
        </Channel>
      </Chat>
  );
};

export default App;

在更新channel的 state 值后,我將通過channel.hide()方法隱藏消息,但是此行會引發Uncaught (in promise) TypeError: Cannot read property 'hide' of null

在此處輸入圖像描述

setChatClient function 是異步的。 可能當channel.hide()運行時,通道值為 null。 我建議您在值發生變化時隱藏通道:

useEffect(() => {
    if(channel) channel.hide();
}, [channel]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM