为什么我的吐司要出现两次? Console.log仅运行一次

时间:2020-02-22 13:25:20

标签: reactjs socket.io

我正在将websocket集成到我的应用程序中,并且将useEffect与对话作为依赖项使用。 console.log仅运行一次,但是{对话}为null时,toast.add()会显示两次Toast。为什么呢?

我的功能如下:

    useEffect(() => {
        let handler;

        if (socket) {
            handler = data => {
                if (!conversation || conversation._id !== data.message.conversationId) {
                    console.log(conversation)
                    toast.add(`New message from ${data.message.user.displayName}`);
                }
            };

            io.onConversation(handler);
        }

        return () => {
            console.log('conversation handler off');
            io.offConversation(handler);
        }
    }, [socket, conversation]);

2 个答案:

答案 0 :(得分:0)

因为useEffect将拆除先前的处理程序,并在conversation变为null时建立一个新的处理程序,并且因为处理程序中的if语句将评估{ 1}},当trueconversation时。我会这样写:

null

答案 1 :(得分:0)

我已经弄清楚了为什么它不起作用。这与我从互联网上复制的吐司钩有关。现在,我正在使用public void clickStart(View view) { TextView textView = findViewById(R.id.textView); int counter = 0; for (int i=0;i<1500;i++) { counter = counter + 10; textView.setText(counter); } } public void clickComplete(View view) { //Write code to stop executing for loop in clickStart() } 及其按预期的方式工作。