gpt4 book ai didi

javascript - 在 React Hooks 中使用 SetTImeout 的交通灯

转载 作者:行者123 更新时间:2023-12-02 21:32:40 24 4
gpt4 key购买 nike

const lightDurations = [ 5000, 2000, 1000];

const TrafficLight = ({ initialValue }) => {
const [colorIndex, setColorIndex] = useState(initialValue);

useEffect(() => {
const timer = setTimeout(() => {
setColorIndex((colorIndex + 1) % 3);
}, lightDurations[colorIndex]);
return () => {
clearTimeout(timer);
};
});

return (
<div className="traffic-light">
<Light color="#f00" active={colorIndex === 0} />
<Light color="#ff0" active={colorIndex === 2} />
<Light color="#0c0" active={colorIndex === 1} />
</div>
);
};

代码完美运行。它只是一个改变颜色的交通灯。但我首先需要三个灯激活五秒钟,并且只激活一次。我不知道该怎么做。

最佳答案

您可以添加一个额外的状态变量来表示 TrafficLight 是否正在工作或者是否处于初始状态。然后您只需按照与 colorIndex 类似的方式切换此状态即可。

const initialDelay = 5000;

const TrafficLight = ({ initialValue }) => {
const [colorIndex, setColorIndex] = useState(initialValue);
const [isStarted, setIsStarted] = useState(false);

useEffect(() => {
const timer = setTimeout(() => {
setIsStarted(true);
}, initialDelay);
return () => {
clearTimeout(timer);
};
}, []); // note [] - it makes it run once

useEffect(() => {
if (!isStarted) {
return;
}
const timer = setTimeout(() => {
setColorIndex((colorIndex + 1) % 3);
}, lightDurations[colorIndex]);
return () => {
clearTimeout(timer);
};
});

return (
<div className="traffic-light">
<Light color="#f00" active={!isStarted || colorIndex === 0} />
<Light color="#ff0" active={!isStarted || colorIndex === 2} />
<Light color="#0c0" active={!isStarted || colorIndex === 1} />
</div>
);
};

关于javascript - 在 React Hooks 中使用 SetTImeout 的交通灯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60582627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com