У меня базовый <img> с src.
<img src = {src} />
Если я изменю src с, скажем, /1.jpg на /2.jpg, а загрузка нового образа займет 1 секунду, React продолжит показывать /1.jpg до тех пор, пока не загрузится новый образ.
Я хочу, чтобы старое изображение было отброшено во время загрузки нового. (например, дисплей: нет)
Есть идеи, как этого добиться? В идеале без условного рендеринга, потому что мне еще нужно использовать onLoad и onError
Обновлено: вот еще код. Это немного сложнее, чем мой вопрос, но я просто пытаюсь добавить к изображению некоторую загрузку и состояние ошибки.
У меня есть кнопка, которая вызывает это onClick
this.props.history.push('/${page + 1}');
Это компонент изображения, где src основан на page из URL-адреса.
import React, { Component } from 'react';
import CenteredLoading from 'components/loading/CenteredLoading';
type Props = { src: string };
type State = {
status: 'LOADING' | 'LOADED' | 'FAILED',
};
class ImageWithLoader extends Component<Props, State> {
state = {
status: 'LOADING',
};
handleImageLoad = () => {
this.setState({ status: 'LOADED' });
console.error('image loaded');
};
handleImageError = () => {
this.setState({ status: 'FAILED' });
console.error('image error');
};
render() {
const { src, ...otherProps } = this.props;
const { status } = this.state;
return (
<React.Fragment>
<img
{...otherProps}
onLoad = {this.handleImageLoad}
onError = {this.handleImageError}
src = {src}
/>
{status === 'LOADING' && <CenteredLoading />}
{status === 'FAILED' && <p>error</p>}
</React.Fragment>
);
}
}
export default ImageWithLoader;



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Сделал свой собственный обходной путь.
Я считаю, что, поскольку response не монтирует новый компонент (например, <img>), он не будет обновляться до нового образа, пока он не завершит загрузку.
Что я сделал, так это проверил, изменился ли src в componentDidUpdate, и изменил статус на LOADING. Затем я установил стиль img на display: none, в то время как его статус был LOADING.
Обновлено: Кроме того, вручную установив свой собственный ключ, я могу заставить React повторно визуализировать <img>
Просто добавьте ключевой атрибут в свой тег изображения и присвойте уникальное значение ключевому атрибуту, например источнику изображения.
<img src = {image_source} key = {image_source}></img>
У меня это не сработало.
@AhmedGhrib, поделитесь, пожалуйста, своим кодом.
Это тот же код, что и вы предложили.
тогда он должен работать. Возможно, ваш src не меняется. Поделитесь кодом того, как вы меняете свой src и добавляете его в dom.
Я действительно обнаружил, что сам URL не меняется. Но в облаке изображение меняется. Так что я думаю, что это другая проблема.
Код? Вы можете изменить это, обновив состояние.