javascript - OnLoad 不会在缓存的图像上触发
问题描述
我想听load
我的图像事件。这就是我正在尝试的方式。
export const Picture: FC<PictureProps> = ({ src, imgCls, picCls, lazy, alt: initialAlt, onLoad, onClick, style }) => {
const alt = useMemo(() => initialAlt || generator.next().value, [src, initialAlt]);
const { publicRuntimeConfig } = getConfig();
return (
<picture style={style} className={picCls}>
{!publicRuntimeConfig.dev && <source srcSet={`${src}.webp`} type="image/webp"/>}
<img onLoad={onLoad} className={imgCls} alt={alt} src={src} loading={lazy ? 'lazy' : 'eager'}
onClick={onClick} />
</picture>
);
};
据我了解,这段代码应该可以正常工作。但是当图像被缓存时,它们不会load
不时触发事件。
我需要知道,我的所有图像何时加载。为此,我检查了加载图像的数量。但是当至少有 1 张图像没有触发事件时,它不起作用。error
事件也不会触发,我可以看到所有图像总是加载到调试器工具中。
我该怎么办?
我知道我可以添加类似的东西src?_dc=timestamp
,但我确实需要缓存,它确实加快了重新上传的速度。
UPD:所有加载的图像都返回 304 状态。但是触发的图像数量load
从 0 到总量不同
解决方案
出现此问题是因为它总是从缓存中获取图像
请在图片 URL 后添加时间戳
你可以从两边做
- 从后端(数据库端)
例如 :
@ImagePath+ REPLACE(ImagePath, '~', '') + '?time='+FORMAT(getdate(),'yyyyMMddHHmmssffff')
- 在 IONIC 代码(打字稿)中
例如 :
npm i moment --save
import * as moment from moment
const dateStringThatWorksForIonicDatepicker = moment.unix(1536883200000).format(‘YYYY-MM-DD’)
推荐阅读
- python - 如何在不真正导入的情况下使用长 python 模块包的别名?
- azure - 有什么方法可以将 3rd 方程序/应用程序添加到此代理
- php - Laravel 5.7:通过 AWS SES 的按需电子邮件通知将我的收件人电子邮件视为发件人电子邮件,并希望它是经过验证的地址
- spring-boot - spring boot rest客户端连接异常::org.springframework.web.client.HttpClientErrorException:400 null
- c# - 一个代码块可以包含任意数量的语句吗?
- jenkins - 詹金斯插件安装有无重启区别
- android - 如何在两个 LAN 运行时正确配置 DNS?
- yocto - 如何在基于 Yocto 项目的 lk-bootloader 中集成修补程序
- android - 使用 OkHttp 有多安全
- python - 如何使用 PIL 和 Tkinter 绘制光滑的线条