javascript - 如何定期更改状态值?
问题描述
function Carousal() {
const [image, setImage] = useState(image_1);
return (
<div>
{setInterval(() => {setImage(image_1)}, 1000)}
{setInterval(() => {setImage(image_2)}, 2500)}
{setInterval(() => {setImage(image_3)}, 3500)}
{Note : above functions are for state change}
<img src={image} />
</div>
);
}
问题:上述定时功能周期性改变状态,但4秒后图像变化不受控制
问题:如何每 1 秒更改一次状态?所需图像的重复。
image_3/image_2 = 表示图像位置
解决方案
在 中保留当前图像的索引state
,然后定义一个每秒递增它的方法。调用该方法useEffect
以在页面加载时启动,然后img
通过索引数组来填充正确的图像。
function Carousel() {
const [imageIndex, setImageIndex] = React.useState(0);
const images = ["image_1", "image_2", "image_3"];
const nextImage = () => {
setImageIndex(prev => (prev + 1) % images.length)
setTimeout(nextImage, 1000)
}
React.useEffect(nextImage, [])
return (
<div>
<img src={images[imageIndex]} alt={images[imageIndex]}/>
</div>
);
}
ReactDOM.render( <Carousel /> , document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="root"></div>
推荐阅读
- flutter - 交错的 GridView 底部的所有项目- Flutter
- perl - 计算有条件的行数
- python - 如何避免在 python 中从 PDF 文件中提取小图像元素?
- matrix - 爪哇 | 二进制矩阵
- asp.net - RSA 加密时出现错误长度异常
- data-protection - Windows 数据保护 API 如何使用新 PIN 码
- elasticsearch - 启用 xpack 后 Elastic Search 无法启动
- php - 在php中安装composer时遇到问题
- c# - 无法从单元测试程序集中访问静态变量
- reactjs - [material-ui][DatePicker] 为 DatePicker/TimePicker/DateTimePicker 更改 @material-ui/pickers Ok/Cancel 对话框按钮文本颜色