我正在为图像构建一个延迟加载组件.但我设置状态有问题.我得到的只能更新已安装或安装的组件错误,但我在componentDidMount中使用setState,这应该允许我避免这样的错误.
这是我的代码:
export default class Images extends React.Component { constructor(props) { super(props); this.element = null; this.state = { loaded: false,height: 0 }; } componentDidMount() { this.element = findDOMNode(this); this.loadImage(); } getDimensions() { const w = this.element.offsetWidth; let initw = 0; let inith = 0; let result; const img = new Image(); img.src = this.props.url; img.onload = (e) => { initw = e.path[0].width; inith = e.path[0].height; result = (w / initw) * inith; setTimeout(() => { this.setState({ loaded: true,height: `${result}px` }); }); } } loadImage() { _scrolling.add([this.element],() => { if (this.element.classList.contains(_scrolling.classes.coming)) { // the image is visible this.getDimensions(); } }); } render() { const classes = this.state.loaded ? `${this.props.parentClass}__image--loaded` : null; const styles = this.state.loaded ? { maxHeight: this.state.height,minHeight: this.state.height,overflow: 'hidden' } : null; return ( <div className={`${this.props.parentClass}__image ${classes}`} style={styles}> {this.state.loaded ? <img className={`${this.props.parentClass}__img`} src={this.props.url} title={this.props.title} alt={this.props.title} /> : null } </div> ) }
我相信问题在于img.onload,但我不知道如何实现这一点.我该怎么办?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。