react最佳實踐

react最佳實踐(基礎(chǔ)篇)

以下僅僅是個人意見或者是react實踐中的技巧,只針對代碼不針對個人

  • 無論如何,請考慮好狀態(tài)應(yīng)該放在 組件內(nèi)部的state 或者是 redux
  • 如果你的變量只是操作邏輯不會 render UI的情況下,請不要放在state中
//解構(gòu)賦值 
let { state1,state2, state3 } = this.state;
let { prop1, prop2, porp3 } = this.props;
//字符串模板
 `${name}`  
//默認(rèn)值處理
function toDo(name = "who", age = 12){ //to do }
//展開運算符
let obj = { name ="name", age = 12 };
toDo(...obj)
  • 書寫問題
        <Spin
          spinning={props.switcher.atsFetching !== false}   // ???/
        >
  • 判斷屬性是否在對象或者數(shù)組中(省去循環(huán)的代碼)
    if('activeIndex' in props){
        //to do
    }
  • 在合適的情況下,使用且必須推薦無狀態(tài)組件(沒有狀態(tài)沒有生命周期只傳prop實現(xiàn))
    // 無狀態(tài)組件接收的參數(shù)必須使用 {} 包裹,它傳入的是 父組件的props 
    function Button({text='按鈕',color='red'}){
        return (
            <button className={btn btn-${color}}>
                <span>${text}</text>
            </button>
        )
    }
  • 類型檢查
    //函數(shù)的類型檢查是propTypes.func
    //布爾類型的propTypes.bool
    be:避開關(guān)鍵詞
  • 生命周期
    //WillMount會在render之前執(zhí)行,DidMount則會在render之后執(zhí)行
    如果在DidMount后又setState則會 re-render
    //在執(zhí)行reactComponentWillMount的時候進(jìn)行setState是不會重新re-render的,
    //而是會合并state
    /*
    
    */

!!注意:禁止在shouldComponentUpdate和ComponentWillUpdate中setState,
會導(dǎo)致循環(huán)調(diào)用直到瀏覽器耗光了內(nèi)存

  • react綁定this
    /*
        如果綁定this不需要傳遞參數(shù)的情況下可以使用::this.handleClick
        而且項目中要使用 stage-0 的提案
    */
    /* 
        在react中使用DOM原生事情,一定要在組件卸載的時候手動移除事件
        否則很有可能會造成內(nèi)存泄漏
    */
    /*
        不要將合成事件與原生事件混用,否則達(dá)不到你想要的效果
    */
  • 不要直接在組件上寫樣式
    return < input style={{color:'red'}}> //這樣每次都會得到新的style對象,造成重新render的性能消耗
    //使用先定義的方式來處理這個問題
  • react性能優(yōu)化方案(在shouldComponentUpdate)
    import React from 'react';
    import { is } from 'immutable';

    class App extends Component {
        shouldComponentUpdate(nextProps,nextState){
            const thisProps = this.props || {};
            const thisState = this.state || {};
    
            if(Object.keys(thisProps).length !== Object.keys(nextProps).length
            || Object.keys(thisState).length !== Object.keys(nextState).length){
                return true
            }
    
            for(const key in nextProps){
                if(nextProps.hasOwnProperty(key) && !is( thisProps[key], nextProps[key])){
                    return true
                }
            }
    
            for(const key in nextState){
                if(nextState.hasOwnProperty(key) && !is( thisState[key], nextState[key])){
                    return true
                }
            }
    
            return false
        }
    } 
  • react建議使用的css動畫庫
    react-smooth react-motion
  • SVG線條動畫
    vivus
  • react中遍歷數(shù)組或者是對象的時候注意點
    在使用 key 的時候請不要使用自然索引,請使用id

CSS樣式

  • OOCSS BEM(推薦)
  • 不要強(qiáng)行覆寫antd或者是二次封裝的組件樣式
  • 不要使用浮動
  • scss使用熟練
  • 使用語義化標(biāo)簽

持續(xù)更新....

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市娶视,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌余境,老刑警劉巖著淆,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馋艺,死亡現(xiàn)場離奇詭異侧纯,居然都是意外死亡勃救,警方通過查閱死者的電腦和手機(jī)碍讨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剪芥,“玉大人垄开,你說我怎么就攤上這事琴许∷胺荆” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長益兄。 經(jīng)常有香客問我锻梳,道長,這世上最難降的妖魔是什么净捅? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任疑枯,我火速辦了婚禮,結(jié)果婚禮上蛔六,老公的妹妹穿的比我還像新娘荆永。我一直安慰自己,他們只是感情好国章,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布具钥。 她就那樣靜靜地躺著,像睡著了一般液兽。 火紅的嫁衣襯著肌膚如雪骂删。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天四啰,我揣著相機(jī)與錄音宁玫,去河邊找鬼。 笑死柑晒,一個胖子當(dāng)著我的面吹牛欧瘪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匙赞,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼恋追,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了罚屋?” 一聲冷哼從身側(cè)響起苦囱,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脾猛,沒想到半個月后撕彤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡猛拴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年羹铅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愉昆。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡职员,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跛溉,到底是詐尸還是另有隱情焊切,我是刑警寧澤扮授,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站专肪,受9級特大地震影響刹勃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嚎尤,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一荔仁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芽死,春花似錦乏梁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坪哄,卻和暖如春质蕉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翩肌。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工模暗, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人念祭。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓兑宇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粱坤。 傳聞我的和親對象是個殘疾皇子隶糕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容