在同构呈现的页面图像可以在主script.js文件之前下载.因此,可以在react注册onLoad事件之前加载图像- 从不触发此事件.
script.js
constructor(props) {
super(props);
this.handleImageLoaded = this.handleImageLoaded.bind(this);
}
handleImageLoaded() {
console.log('image loaded');
}
render() {
return (
<img src='image.jpg' onLoad={this.handleImageLoaded} />
);
}
Run Code Online (Sandbox Code Playgroud)
image.jpg大于script.js在这种情况下一切正常.在最终加载图像之前注册事件,因此在控制台中是image loaded消息.
image.jpg小于script.js在这种情况下,您可以看到帖子开头描述的问题.onLoad事件未触发.
为了onLoad在方案2中触发事件,我该怎么办?
要检测渲染时图像是否准备好,您应该检查complete纯javascript img对象上的属性:
constructor(props) {
super(props);
this.state = { loaded: false };
this.handleImageLoaded = this.handleImageLoaded.bind(this);
this.image = React.createRef();
}
componentDidMount() {
const img …Run Code Online (Sandbox Code Playgroud)