Это можно сделать с помощью
new Image()
и подписки на
onload
событие.
Пример взят из
кода к учебнику по reduxclass BigPhoto extends React.Component {
state = {
isLoading: false,
}
componentDidMount() {
this.loadImage(this.props.url)
}
loadImage = src => {
this.setState({ isLoading: true })
let img = new Image()
img.onload = () => {
this.setState({ isLoading: false })
}
img.src = src
}
render() {
const { isLoading } = this.state
const { url } = this.props
return isLoading ? <p>Загружаю...</p> : <img src={url} alt="big vk" />
}
}
Главное помнить, что загрузка изображения начинается только тогда, когда ему проставлен атрибут src. Функция обработчик на onload должна быть определена заранее! В данном подходе мы используем нативный функционал браузера и js, это подходит не только к react