reactjs - 在 React 中使用 setState 时,setInterval 不能被 clearInterval 停止
问题描述
const handleClick = () => {
setState({ ...state, on: !state.on });
let tog = state.on;
console.log("first" + tog);
const interval = setInterval(() => {
if (tog) {
console.log(tog);
} else clearInterval(interval);
}, 1000);
};
在此处输入图像描述 ,即使tog为假,这个也无法停止;但是,如果我不使用状态,更改为变量就不会发生,这对我来说太奇怪了,我需要一些帮助;
let flag = true;
const handleClick = () => {
flag = !flag;
console.log("first" + flag);
const interval = setInterval(()=>{
if(flag){
console.log(flag);
}else(clearInterval(interval))
},1000)
};
解决方案
React 会handleClick
在每次重新渲染时创建新的,并且会有不同的 setIntervals,
const intvl = useRef(null);
const handleClick = () => {
intvl.current = setInterval(() => { //now interval is not changing on every fn recreation
.....
clearInterval(intvl.current);
}
推荐阅读
- javascript - 仅当表单在页面上时如何加载 CF7 CSS 和 JS
- android - 升级 Gradle 版本后没有出现目标错误的规则
- c++ - 如何使用函数创建二维数组?
- c# - 我真的需要为此方法创建并返回集合吗?
- javascript - 如何用双引号形成一个字符串数组?
- powershell - 使用 PowerShell 创建保留标签策略
- shopify-api - 无法使用 ShopifySharp 重置 Shopify API 比较价格
- ios - 无法将构建上传到 iTuneConnect
- vb.net - 从添加到字典 vb.net 中跳过文本块
- javascript - 如何使用 TypeScript/JavaScript 将对象的类型对象的名称分配为变量