OKこれはDOMにダミーイメージ(表示しないでください)を入れて、それをonLoad
イベントで待ち受けます。それが発生すると、「実際の」画像要素のsrc(手動で、すなわち状態を介さずに)を更新する。
const IMG_WIDTH = 320;
const IMG_HEIGHT = 240;
const baseImageUrl = `http://loremflickr.com/${IMG_WIDTH}/${IMG_HEIGHT}`;
const pics = [
'https://img1.wsimg.com/fos/sales/cwh/8/images/cats-with-hats-shop-02.jpg',
'https://img1.wsimg.com/fos/sales/cwh/8/images/cats-with-hats-og-image.jpg',
'http://www.dispatch.com/content/graphics/2015/05/08/2-cats-in-hats-crafts-art-gof11etjd-1crafts-cats-in-hats-jpeg-03592-jpg.jpg',
'http://www.dispatch.com/content/graphics/2015/05/08/2-cats-in-hats-crafts-art-gof11etjd-1crafts-cats-in-hats-jpeg-0b417-jpg.jpg',
'https://i.ytimg.com/vi/cNycdfFEgBc/maxresdefault.jpg'
];
// this should really be hidden
// leaving it visible for, um, visibility
const hiddenImageStyle = {
width: 100,
height: 100,
};
class Image extends React.Component {
constructor(props) {
super(props);
this.onNextImageLoad = this.onNextImageLoad.bind(this);
this.nextImageUrl = pics[0];
}
onNextImageLoad() {
this.visibleImgEl.src = this.nextImageUrl;
}
render() {
this.nextImageUrl = pics[this.props.imageIndex % 5];
return (
<div>
<img
ref={el => this.visibleImgEl = el}
width={IMG_WIDTH}
height={IMG_HEIGHT}
src={pics[0]}
/>
<img
style={hiddenImageStyle}
src={this.nextImageUrl}
onLoad={this.onNextImageLoad}
/>
</div>
);
}
}
class ImageController extends React.Component {
constructor(props) {
super(props);
this.goToNextImage = this.goToNextImage.bind(this);
this.state = {
imageIndex: 0,
};
}
goToNextImage() {
this.setState({imageIndex: this.state.imageIndex + 1});
}
render() {
return (
<div>
<Image imageIndex={this.state.imageIndex} />
<button onClick={this.goToNextImage}>
Next image
</button>
</div>
);
}
};
ReactDOM.render(<ImageController/>, document.getElementById('app'));
jsbin:https://jsbin.com/ramoxa/2
これは、あなたがそれを行うことができる方法のアイデアを与えるかもしれません:https://jsfiddle.net/69z2wepo/49369/ – TryingToImprove
あなたはいくつかのコードを投稿することができますか? –
以下のDavid氏が投稿した例は、基本的に達成しようとしているものです。違いは、新しいイメージが新しく生成され、キャッシュされないことです。 – NRaf