JavaScript 点击功能开始和停止间隔
JavaScript On-click Function to start and stop Intervals
我有两个 onclick 函数,当我单击开始时,它使用套接字执行启动和停止功能,它开始从服务器请求图像(我正在使用间隔)当我单击停止时,服务器已停止,但请求不断到达服务器.点击后间隔似乎没有停止请检查我的代码
代码:
var interval;
function onclick() {
interval = setInterval(() => {
socket.emit("get_image", "Click");
socket.on('send_image', (message) => {
setImage(message.image);
});
}, 350)
}
function onclicks() {
clearInterval(interval);
setImage(blanked);
}
我尝试添加 clearInterval 函数,但它似乎不起作用
在组件顶层声明的变量在每次渲染时重新声明(此处每次调用 setImage()
),因此 interval
在调用 onclicks()
时未定义。
为了通过渲染保持价值,您需要使用 state
(useState) or a ref
(useRef),这不会失去它的价值。在这种情况下,由于您不希望渲染附加到 interval
的值,因此 ref
更合适。 useRef()
returns 具有 current
属性 的对象,您的值将存储在其中。
const interval = React.useRef(null);
function onclick() {
interval.current = setInterval(() => {
socket.emit("get_image", "Click");
socket.on('send_image', (message) => {
setImage(message.image);
});
}, 350);
}
function onclicks() {
clearInterval(interval.current);
interval.current = null; // reset the ref
setImage(blanked);
}
您可能还想避免设置多个间隔。您可能已经这样做了,但如果没有,您可以在设置新值之前检查 interval
是否为 null。
const interval = React.useRef(null);
function onclick() {
if (interval.current === null) { // only set new interval if interval ref is null
interval.current = setInterval(() => {
socket.emit("get_image", "Click");
socket.on('send_image', (message) => {
setImage(message.image);
});
}, 350);
}
}
我有两个 onclick 函数,当我单击开始时,它使用套接字执行启动和停止功能,它开始从服务器请求图像(我正在使用间隔)当我单击停止时,服务器已停止,但请求不断到达服务器.点击后间隔似乎没有停止请检查我的代码
代码:
var interval;
function onclick() {
interval = setInterval(() => {
socket.emit("get_image", "Click");
socket.on('send_image', (message) => {
setImage(message.image);
});
}, 350)
}
function onclicks() {
clearInterval(interval);
setImage(blanked);
}
我尝试添加 clearInterval 函数,但它似乎不起作用
在组件顶层声明的变量在每次渲染时重新声明(此处每次调用 setImage()
),因此 interval
在调用 onclicks()
时未定义。
为了通过渲染保持价值,您需要使用 state
(useState) or a ref
(useRef),这不会失去它的价值。在这种情况下,由于您不希望渲染附加到 interval
的值,因此 ref
更合适。 useRef()
returns 具有 current
属性 的对象,您的值将存储在其中。
const interval = React.useRef(null);
function onclick() {
interval.current = setInterval(() => {
socket.emit("get_image", "Click");
socket.on('send_image', (message) => {
setImage(message.image);
});
}, 350);
}
function onclicks() {
clearInterval(interval.current);
interval.current = null; // reset the ref
setImage(blanked);
}
您可能还想避免设置多个间隔。您可能已经这样做了,但如果没有,您可以在设置新值之前检查 interval
是否为 null。
const interval = React.useRef(null);
function onclick() {
if (interval.current === null) { // only set new interval if interval ref is null
interval.current = setInterval(() => {
socket.emit("get_image", "Click");
socket.on('send_image', (message) => {
setImage(message.image);
});
}, 350);
}
}