setInterval 在 ReactJS 中不能正常工作
setInterval does not work properly in ReactJS
我在 ReactJS(特别是功能组件)中遇到了 setInterval 问题。我想启用自动播放滑块(这意味着 Slider Bar 中的值会在一段时间后增加)。单击按钮时将触发此功能。但是我不确切知道setInterval 和setValue 是如何工作的。控制台日志只是 returns 初始值(不会改变)(console.log 函数在 setInterval 的回调函数中被调用)。
我的代码如下:
const [value, setValue] = useState(10);
const [playable, setPlayable] = useState(false);
useEffect(() => {
if (playable === true) {
console.log("Trigger");
const intervalId = setInterval(increaseValue, 1000);
return () => clearInterval(intervalId);
}
}, [playable]);
const increaseValue = () => {
console.log(value);
setValue(value + 1);
};
const autoPlay = () => {
setPlayable(true);
};
return (
<div>
<div style={{"width": "800px"}}>
<Slider
value={value}
step={1}
valueLabelDisplay="on"
getAriaValueText={valueText}
marks={marks}
onChange={handleChange}
min={0}
max={100}
/>
</div>
<button onClick={autoPlay}>Play</button>
</div>
)
所以,我认为你需要将 increaseValue
函数传递给 useEffect
useEffect(() => {
if (playable === true) {
console.log("Trigger");
const intervalId = setInterval(increaseValue, 1000);
return () => clearInterval(intervalId);
}
}, [playable, increaseValue]);
我在 ReactJS(特别是功能组件)中遇到了 setInterval 问题。我想启用自动播放滑块(这意味着 Slider Bar 中的值会在一段时间后增加)。单击按钮时将触发此功能。但是我不确切知道setInterval 和setValue 是如何工作的。控制台日志只是 returns 初始值(不会改变)(console.log 函数在 setInterval 的回调函数中被调用)。
我的代码如下:
const [value, setValue] = useState(10);
const [playable, setPlayable] = useState(false);
useEffect(() => {
if (playable === true) {
console.log("Trigger");
const intervalId = setInterval(increaseValue, 1000);
return () => clearInterval(intervalId);
}
}, [playable]);
const increaseValue = () => {
console.log(value);
setValue(value + 1);
};
const autoPlay = () => {
setPlayable(true);
};
return (
<div>
<div style={{"width": "800px"}}>
<Slider
value={value}
step={1}
valueLabelDisplay="on"
getAriaValueText={valueText}
marks={marks}
onChange={handleChange}
min={0}
max={100}
/>
</div>
<button onClick={autoPlay}>Play</button>
</div>
)
所以,我认为你需要将 increaseValue
函数传递给 useEffect
useEffect(() => {
if (playable === true) {
console.log("Trigger");
const intervalId = setInterval(increaseValue, 1000);
return () => clearInterval(intervalId);
}
}, [playable, increaseValue]);