当前位置:  开发笔记 > 编程语言 > 正文

react.js替换img src onerror

如何解决《react.js替换imgsrconerror》经验,为你挑选了5个好方法。



1> Deepak Malla..:

这对我来说效果最好

{e.target.onerror = null; e.target.src="image_path_here"}}/>


似乎这个方法可能会导致无限回调,如果"image_path_here"产生和错误...
@tomhughes,当“ image_path_here”失败时,它将阻止无限回调

2> 小智..:

您可以使用不受控制的组件:

 this.img = img} onError={
    () => this.img.src = 'img/default.img'
}>



3> Skay..:

您只需定义onError处理程序,而不是更改将触发组件呈现方法的状态,最终组件将使用占位符重新呈现.

请不要一起使用jQuery和React!

import React from 'react';
import {Link} from 'react-router';
import ContactStore from '../stores/ContactStore'
import ContactActions from '../actions/ContactActions';

class Contact extends React.Component {
  constructor(props) {
    super(props);
    this.state = ContactStore.getState();
    this.onChange = this.onChange.bind(this); 
 }

componentDidMount() {
  ContactStore.listen(this.onChange);
  ContactActions.getContact(this.props.params.id);
}

componentWillUnmount() {
  ContactStore.unlisten(this.onChange);
}

componentDidUpdate(prevProps) {
  if (prevProps.params.id !== this.props.params.id) {
    ContactActions.getContact(this.props.params.id);
  }
}

onChange(state) {
  this.setState(state);
}

onError() {
  this.setState({
    imageUrl: "img/default.png"
  })
}

render() {
  return (
    

{this.state.contact.displayname}

); } export default Contact;



4> emil..:

由于没有完美的答案,因此我发布了我使用的代码段。我正在使用Image回退到的可重用组件fallbackSrc

由于后备图片可能再次失败并触发无限次重新渲染循环,因此我添加了errored状态。

import React, { Component } from 'react';
import PropTypes from 'prop-types';

class Image extends Component {
  constructor(props) {
    super(props);

    this.state = {
      src: props.src,
      errored: false,
    };
  }

  onError = () => {
    if (!this.state.errored) {
      this.setState({
        src: this.props.fallbackSrc,
        errored: true,
      });
    }
  }

  render() {
    const { src } = this.state;
    const {
      src: _1,
      fallbackSrc: _2,
      ...props
    } = this.props;

    return (
      
    );
  }
}

Image.propTypes = {
  src: PropTypes.string,
  fallbackSrc: PropTypes.string,
};


5> Nitesh Ranja..:

如果后备图像也失败,Arthur的答案将导致无限回调。

为了避免这种情况,请首先在构造函数中将imageLoadError的状态设置为true:

constructor(props) {
    super(props);
    this.state = {
      imageLoadError: true,
    };
}

然后在onError函数中检查此状态值,以避免无限回调,

该代码将如下所示:-

 { 
        if(this.state.imageLoadError) { 
            this.setState({
                imageLoadError: false
            });
            e.target.src = 'fallbackImage.png';
        }
    }}
/>

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有