javascript - 如何在反应中缓存/保存图像并显示它们?
问题描述
我有一个图片的 URL 列表。这些图像中的每一个有时会加载,有时会加载 404(这意味着在某些时候加载的图像可能会在稍后消失)。
let images = ['http://example.com/img1.jpg', ...];
有没有办法请求这些图像,如果请求成功则将它们保存在内存中,并在 React 中显示这些保存的图像?
componentDidMount() {
this.setState({ savedImages: images.map(saveImage)} );
}
render() {
return (
<div><image src={this.state.savedImages[0]}/></div>
);
}
解决方案
好的,让我将评论中的全部信息表示为完整的答案。
备注:这个问题实际上不是特定于 React 的,而是 vanilla JS。
这个想法是动态创建Image
实例:
/* Somewhere inside the React class, I think */
preloadImages = () => {
let links = ["link1", "link2", "link3"]
/* the one react-specific thing is this.setState */
this.setState({ images: links.map((link, i) => {
// create an Image instance
var img = new Image()
// setting handler for load complete
img.onload = () => this.handleImageLoad(i)
// set the src attribute for it. After this line image loading will start
img.src = link
// return object with indicate of image loading statement
return {
url: link,
loaded: false
}
}) })
}
// nuff said, I suppose, this function is clear :)
handleImageLoad = index => {
var { images } = this.state
images[index].loaded = true
this.setState({ images })
}
显然,现在您可以this.state.images
在渲染中使用并仅渲染已加载的图像:)
推荐阅读
- php - 名称验证表单不允许名称之间有空格
- sql - 每个行组合的 SQL 总计
- react-native - 使手势状态逐步返回值(类似网格的行为)
- azure - 创建新分支时如何触发管道
- csvhelper - CSVHelper 涉及 CurrentIndex 和内部异常“路径不是有效形式”的错误。
- apollo-client - 使用缓存优先策略进行过度获取
- postgresql - 从 MySQl 切换到 Postgresql 后,Sqlalchemy 找不到架构
- list - SwiftUI:在 ScrollView 或 List 中时,PageTabViewStyle() 新损坏?
- node.js - 如何让 Discord 机器人将消息发送到 Discord Node js 的特定频道机器人
- java - 数据库中的数据不会显示