如何在JavaScript三元语句中使用AND/OR运算符组合多条件?
问题解答
首先要修正你代码里的一个关键问题:stopTimer是普通变量,不是React状态,直接修改它不会触发组件重渲染,定时器也无法感知到这个值的变化。你需要用useState来定义它:
const [stopTimer, setStopTimer] = useState(false); const stopBtnHandler = () => { setStopTimer(true); };
接下来解决你关心的多条件判断问题:
用逻辑与(&&)实现多条件
你原来用&&执行条件逻辑,要加入stopTimer的判断,直接把两个条件用&&串联即可,这是JS里常用的短路求值写法,比三元更简洁(因为你不需要else分支):
count > 0 && !stopTimer && setCount(data => data - 1);
注:这里用!stopTimer是因为实际需求应该是未停止时才继续倒计时,和你写的if (count > 0 AND stopTimer === true)逻辑相反,你可能搞反了条件,需要注意。
用三元表达式实现
如果一定要用三元,因为不需要else分支,else部分可以写null或者空表达式:
count > 0 && !stopTimer ? setCount(data => data - 1) : null;
优化后的完整定时器逻辑
你的useEffect依赖是count,会导致每次count变化都重新创建定时器,建议把stopTimer也加入依赖数组,确保状态变化时定时器能感知:
useEffect(() => { const timer = setInterval(() => { count > 0 && !stopTimer && setCount(data => data - 1); }, 1000); return () => clearInterval(timer); }, [count, stopTimer]);
补充说明
- 逻辑与(
&&)在这种仅条件满足时执行代码的场景下非常常用,不属于「奇怪语法」,是JS的标准用法。 - 务必把
useEffect中用到的所有状态加入依赖数组,避免闭包导致的状态过期问题。
内容的提问来源于stack exchange,提问作者Joseph Choi
相关产品推荐
相关产品推荐

