react封裝圖片顯示組件,路徑錯誤顯示默認圖片

在開發(fā)中棒搜,經(jīng)常遇到圖片加載失敗的情況,如果圖片加載失敗活箕,顯示一個錯誤標志會嚴重影響用戶體驗度力麸。如果在判斷圖片加載失敗后顯示默認圖片就解決這個問題。
img 標簽有src屬性,用來給定圖片的地址克蚂,還有一個onError屬性表示圖片加載失敗觸發(fā)的事件屬性闺鲸,有了這個屬性就很好做圖片加載失敗的處理了。

<img src="" onError="" />

一埃叭、使用hook方式封裝組件

import React, {useState, useEffect} from 'react';

/**
 * 圖片加載失敗就顯示默認圖片
 * 使用hook方式
 * @param {*} src  圖片路徑
 * @param {*} style  圖片樣式
 * @param {*} defaultImg  默認顯示的圖片路徑
 */
const MyImg = ({src, style, defaultImg}) => {
    const [imgSrc, handleImageErrored] = useState(src);
    // useEffect(() => {
        // 組件更新
    // });
    return (
        <img style={style}
            src={imgSrc}
            onError={() => handleImageErrored(defaultImg)}
        />
    );
}
export default MyImg;

二摸恍、react普通封裝組件的方法:

import React from 'react';
/**
 * 圖片加載失敗就顯示默認圖片
 */
class MyImg extends React.Component {
   constructor(props){
        super(props);
        this.state = {
            src: props.src
        }
    }
    // 父組件更新后,子組件更新赤屋,這里可以優(yōu)化
    componentWillReceiveProps(nextprops) {
        this.setState({src: nextprops.src});
    }

    // 圖片加載失敗立镶,將默認值賦值給src
    handleImageErrored() {
        const { defaultImg } = this.props;
        this.setState({
            src: defaultImg
        });
    }

    render() {
        return (
            <img style={this.props.style}
                 src={this.state.src}
                 onError={this.handleImageErrored}
            />
        );
    }
}
export default MyImg;

三、使用方式:

import MyImg from '@/component/MyImg';
...
<MyImg 
  src={`${BASE_URL}${photoPath}`} 
  defaultImg={require('...')}
/>
...
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末类早,一起剝皮案震驚了整個濱河市媚媒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涩僻,老刑警劉巖缭召,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逆日,居然都是意外死亡嵌巷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門室抽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晴竞,“玉大人,你說我怎么就攤上這事狠半∝溃” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵神年,是天一觀的道長已维。 經(jīng)常有香客問我,道長已日,這世上最難降的妖魔是什么垛耳? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮飘千,結果婚禮上堂鲜,老公的妹妹穿的比我還像新娘。我一直安慰自己护奈,他們只是感情好缔莲,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霉旗,像睡著了一般痴奏。 火紅的嫁衣襯著肌膚如雪蛀骇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天读拆,我揣著相機與錄音擅憔,去河邊找鬼。 笑死檐晕,一個胖子當著我的面吹牛暑诸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辟灰,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼个榕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伞矩?” 一聲冷哼從身側響起笛洛,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乃坤,沒想到半個月后苛让,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡湿诊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年狱杰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厅须。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡仿畸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出朗和,到底是詐尸還是另有隱情错沽,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布眶拉,位于F島的核電站千埃,受9級特大地震影響,放射性物質發(fā)生泄漏忆植。R本人自食惡果不足惜放可,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望朝刊。 院中可真熱鬧耀里,春花似錦、人聲如沸拾氓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痪枫。三九已至织堂,卻和暖如春叠艳,著一層夾襖步出監(jiān)牢的瞬間奶陈,已是汗流浹背易阳。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吃粒,地道東北人潦俺。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像徐勃,于是被迫代替她去往敵國和親事示。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354