我正在将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]);
答案 0 :(得分:0)
因为useEffect
将拆除先前的处理程序,并在conversation
变为null
时建立一个新的处理程序,并且因为处理程序中的if
语句将评估{ 1}},当true
为conversation
时。我会这样写:
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()
}
及其按预期的方式工作。