gpt4 book ai didi

javascript - 如何在 React 中每 X 秒更改一次背景图像?

转载 作者:行者123 更新时间:2023-11-30 09:16:10 24 4
gpt4 key购买 nike

最终编辑:

见下面的工作代码:

import React, { Component } from 'react';


var images = [
"https://www.royalcanin.com/~/media/Royal-Canin/Product-Categories/cat-adult-landing-hero.ashx",
"https://upload.wikimedia.org/wikipedia/commons/4/4d/Cat_March_2010-1.jpg"
]


class App extends Component {

constructor(props) {
super(props);
this.state = { imgPath: "url(" + images[1] + ")" };
}

componentDidMount() {
this.interval = setInterval(() => {
this.setState({ imgPath: "url(" + images[0] + ")" })
}, 1000);
}

componentWillUnmount() {
clearInterval(this.interval);
}

render() {
return (
<div className="App">
<div className='dynamicImage' style={{ backgroundImage: this.state.imgPath }} >
{console.log(this.state.imgPath)}
</div>
</div >
);
}
}


原帖:

我正在尝试使用 setInterval() 每隔 X 秒动态更改图像。

我只是不明白 setInterval 应该放在代码中的什么位置,或者它的输出应该是什么。

我当前的代码是:

import React, { Component } from 'react';

// Paths to my images
var images = [
"https://www.royalcanin.com/~/media/Royal-Canin/Product-Categories/cat-adult-landing-hero.ashx",
"https://upload.wikimedia.org/wikipedia/commons/4/4d/Cat_March_2010-1.jpg"
]

var imgPath = "url(" + images[1] + ")" // Set original value of path

function f1() {
imgPath = "url(" + images[0] + ")" // Change path when called ?
}

class App extends Component {
render() {

setInterval(f1, 500); // Run f1 every 500ms ?

return (
<div className="App">
<div className='dynamicImage' style={{ backgroundImage: imgPath }} > // Change background image to one specified by imgPath
</div>
</div >
);
}
}

export default App;

当前代码输出第一个 imgPath 的 URL,但无法将其更新为函数 f1 中指定的 URL。据我所知,函数 f1 似乎确实在运行,因为删除它或设置 undefined variable 确实会返回错误。我只是无法让它改变 imgPath。

关于我做错了什么,或者我如何改进我的代码有什么想法吗?

干杯

编辑:注释代码+删除不必要的行

最佳答案

我会将您所有的变量移动到您的组件中,正如 Akash Salunkhe 所建议的那样,使用 componnentDidMount 来设置间隔。不要忘记清除组件卸载时的间隔。

这个答案也适用于使用任意数量的图像。

class App extends React.Component {
constructor(props) {
super(props);

const images = [
"https://www.royalcanin.com/~/media/Royal-Canin/Product-Categories/cat-adult-landing-hero.ashx",
"https://www.petfinder.com/wp-content/uploads/2013/09/cat-black-superstitious-fcs-cat-myths-162286659.jpg",
"https://upload.wikimedia.org/wikipedia/commons/4/4d/Cat_March_2010-1.jpg"
];

this.state = {
images,
currentImg: 0
}
}

componentDidMount() {
this.interval = setInterval(() => this.changeBackgroundImage(), 1000);
}

componentWillUnmount() {
if (this.interval) {
clearInterval(this.interval);
}
}

changeBackgroundImage() {
let newCurrentImg = 0;
const {images, currentImg} = this.state;
const noOfImages = images.length;

if (currentImg !== noOfImages - 1) {
newCurrentImg = currentImg + 1;
}

this.setState({currentImg: newCurrentImg});
}

render() {
const {images, currentImg} = this.state;
const urlString = `url('${images[currentImg]}')`;

return (
<div className="App">
<div className='dynamicImage' style={{backgroundImage: urlString}} >
</div>
</div >
);
}
}

关于javascript - 如何在 React 中每 X 秒更改一次背景图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54958440/

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