Я хотел бы бесконечно перезагружать изображение по статическому URL-адресу в React. Через некоторые поиски я пришел к нижеприведенному менее чем идеальному решению. Работает, но хотелось бы убрать мерцание загрузки изображения. Я понимаю, что проблема в том, что компонент повторно отображается, а затем загружается изображение. Я видел пару примеров, в которых два изображения используются в качестве заполнителя, а загружаемое скрыто до тех пор, пока оно не загрузится с использованием onLoad
и setState
, но все они предполагают конечное количество изображений. Как я могу сделать так, чтобы это отображалось последним изображением в CardMedia
, пока новое не загрузится, а затем заменится без мерцания каждые пять секунд?
import React from 'react';
import ReactDOM from 'react-dom';
import { Card, CardMedia, CardTitle } from 'react-toolbox/lib/card';
const LIVE_IMAGE = 'https://cdn-images-1.medium.com/max/1600/1*oi8WLwC2u0EEI1j9uKmwWg.png';
class LiveImageCard extends React.Component {
constructor(props) {
super(props);
this.state = {
liveImage: null
};
}
componentDidMount() {
this.interval = setInterval(
() => this.setState({
liveImage: `${LIVE_IMAGE}?${new Date().getTime()}`,
}),
5000
);
}
componentWillUnmount() {
clearInterval(this.interval);
}
render() {
return (
<Card style={{width: '350px'}}>
<CardTitle title="Live Image" />
<CardMedia
aspectRatio="wide"
image={this.state.liveImage}
/>
</Card>
);
}
}
ReactDOM.render(
<LiveImageCard />,
document.getElementById('root'),
);
CardMedia
, когда изображение начинает загружаться (но загружается не полностью). Ваш компонент Card Media должен справиться с этим за вас, иначе вам придется написать свой собственный и использовать промежуточный тайм-аут 1 с между временем загрузки изображения и заменой источника изображения HTML: stackoverflow.com/questions/5438612/ - person klugjo   schedule 17.04.2018setInterval
чем-то вродеconst img = new Image(); img.onload = () => this.setState({ liveImage: img }); img.src = `${LIVE_IMAGE}?${new Date().getTime()}`; this.setState({ temp: img });
, но React или React-Toolbox не любят использовать объектImage
в атрибутеCardMedia
. - person Rob Cannon   schedule 17.04.2018