React學習筆記(二)

條件渲染

  1. if、&&、||、三元表達式

列表 & Keys

  1. 循環(huán)列表時需要給每一項加上獨一無二的key;
  2. 提取出一個 ListItem 組件吸申,你應(yīng)該把 key 保存在數(shù)組中的這個 <ListItem /> 元素上锦聊,而不是放在 ListItem 組件中的 <li> 元素上;
  3. 元素的 key 在他的兄弟元素之間應(yīng)該唯一;
  4. jsx的{}表達式中不能出現(xiàn)var,const,let等這種關(guān)鍵字歹嘹。

組件API

  1. 設(shè)置狀態(tài):setState

    參數(shù)格式

     setState(object nextState[, function callback])
    

    參數(shù)說明

     nextState,將要設(shè)置的新狀態(tài)孔庭,該狀態(tài)會和當前的state合并
     callback尺上,可選參數(shù),回調(diào)函數(shù)圆到。該函數(shù)會在setState設(shè)置成功怎抛,且組件重新渲染后調(diào)用。
     合并nextState和當前state芽淡,并重新渲染組件马绝。setState是React事件處理函數(shù)中和請求回調(diào)函數(shù)中觸發(fā)UI更新的主要方法。
    
  2. 替換狀態(tài):replaceState (將被棄用)

    參數(shù)格式

    replaceState(object nextState[, function callback])

    參數(shù)說明

    nextState吐绵,將要設(shè)置的新狀態(tài)迹淌,該狀態(tài)會替換當前的state。
    callback己单,可選參數(shù)唉窃,回調(diào)函數(shù)。該函數(shù)會在replaceState設(shè)置成功纹笼,且組件重新渲染后調(diào)用纹份。
    replaceState()方法與setState()類似,但是方法只會保留nextState中狀態(tài)廷痘,原state不在nextState中的狀態(tài)都會被刪除蔓涧。

  3. 設(shè)置屬性:setProps

    參數(shù)格式

    setProps(object nextProps[, function callback])

    參數(shù)說明

    nextProps,將要設(shè)置的新屬性笋额,該狀態(tài)會和當前的props合并
    callback元暴,可選參數(shù),回調(diào)函數(shù)兄猩。該函數(shù)會在setProps設(shè)置成功茉盏,且組件重新渲染后調(diào)用。
    設(shè)置組件屬性枢冤,并重新渲染組件鸠姨。

    使用場景

    props相當于組件的數(shù)據(jù)流,它總是會從父組件向下傳遞至所有的子組件中淹真。當和一個外部的JavaScript應(yīng)用集成時讶迁,我們可能會需要向組件傳遞數(shù)據(jù)或通知React.render()組件需要重新渲染,可以使用setProps()核蘸。
    更新組件巍糯,我可以在節(jié)點上再次調(diào)用React.render()啸驯,也可以通過setProps()方法改變組件屬性,觸發(fā)組件重新渲染鳞贷。

  4. 替換屬性:replaceProps

    參數(shù)格式

    replaceProps(object nextProps[, function callback])

    參數(shù)說明

    nextProps坯汤,將要設(shè)置的新屬性,該屬性會替換當前的props搀愧。
    callback,可選參數(shù)疆偿,回調(diào)函數(shù)咱筛。該函數(shù)會在replaceProps設(shè)置成功,且組件重新渲染后調(diào)用杆故。
    replaceProps()方法與setProps類似迅箩,但它會刪除原有 props

  5. 強制更新:forceUpdate

    參數(shù)格式

    forceUpdate([function callback])

    參數(shù)說明

    callback,可選參數(shù)处铛,回調(diào)函數(shù)饲趋。該函數(shù)會在組件render()方法調(diào)用后調(diào)用。

    使用場景

    forceUpdate()方法會使組件調(diào)用自身的render()方法重新渲染組件撤蟆,組件的子組件也會調(diào)用自己的render()奕塑。但是,組件重新渲染時家肯,依然會讀取this.props和this.state龄砰,如果狀態(tài)沒有改變,那么React只會更新DOM讨衣。
    forceUpdate()方法適用于this.props和this.state之外的組件重繪(如:修改了this.state后)换棚,通過該方法通知React需要調(diào)用render()
    一般來說,應(yīng)該盡量避免使用forceUpdate()反镇,而僅從this.props和this.state中讀取狀態(tài)并由React觸發(fā)render()調(diào)用

  6. 獲取DOM節(jié)點:findDOMNode

    獲取操作:

     ReactDOM.findDOMNode(this.refs.counterDom)固蚤,日中refs掛載在真實DOM節(jié)點處,類似vue的this.$refs.XXX
    

    使用場景

     可以用來操作DOM
    
  7. 判斷組件掛載狀態(tài):isMounted

    注意

     isMounted 的方法在 ES6 中已經(jīng)廢除歹茶。主要的原因是它經(jīng)過實際使用與測試可能不足以檢測組件是否掛載夕玩,尤其是對于有一些異步的程序情況,以及邏輯上造成混亂×究鳎現(xiàn)在用以下方法代替:
     componentDidMount() {
         this.mounted = true;
     }
     componentWillUnmount() {
         this.mounted = false;
     }
    

條件渲染

  1. 初始渲染頁面在componentDidMount生命周期里使用

    使用場景

    React 組件的數(shù)據(jù)可以通過 componentDidMount 方法中的 Ajax 來獲取风秤,當從服務(wù)端獲取數(shù)據(jù)時可以將數(shù)據(jù)存儲在 state 中,再用 this.setState 方法重新渲染 UI扮叨。
    當使用異步加載數(shù)據(jù)時缤弦,在組件卸載前使用 componentWillUnmount 來取消未完成的請求。

React 表單與事件

  1. HTML 表單元素與 React 中的其他 DOM 元素有所不同,因為表單元素生來就保留一些內(nèi)部狀態(tài);
  2. 在 HTML 當中彻磁,像 <input>, <textarea>, 和 <select> 這類表單元素會維持自身狀態(tài)碍沐,并根據(jù)用戶輸入進行更新;
  3. 但在React中狸捅,可變的狀態(tài)通常保存在組件的狀態(tài)屬性中,并且只能用 setState() 方法進行更新;
  4. 在 React 中累提,不使用 selected 屬性尘喝,而在根 select 標簽上用 value 屬性來表示選中項,
    如 <select value={this.state.value} onChange={this.handleChange}></select>;
  5. 處理多個表單:當你有處理多個 input 元素時斋陪,你可以通過給每個元素添加一個 name 屬性朽褪,來讓處理函數(shù)根據(jù) event.target.name 的值來選擇做什么
  6. 當你需要從子組件中更新父組件的 state 時,你需要在父組件通過創(chuàng)建事件句柄 (handleChange) 无虚,并作為 prop (updateStateProp) 傳遞到你的子組件上

    父組件:

     class HelloMessage extends React.Component {
         constructor(props) {
             super(props);
             this.state = {value: 'Hello React!'};
             this.handleChange = this.handleChange.bind(this);
         }
         handleChange(event) {
             this.setState({value: 'React'})
         }
         render() {
             var value = this.state.value;
             return <div>
                     <Content myDataProp = {value} 
                     updateStateProp = {this.handleChange}></Content>
                 </div>;
         }
     }
    

    子組件

     render() {
         return  <div>
                 <button onClick = {this.props.updateStateProp}>點我</button>
                 <h4>{this.props.myDataProp}</h4>
             </div>
     }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缔赠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子友题,更是在濱河造成了極大的恐慌嗤堰,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件度宦,死亡現(xiàn)場離奇詭異踢匣,居然都是意外死亡,警方通過查閱死者的電腦和手機戈抄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門离唬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呛凶,你說我怎么就攤上這事男娄。” “怎么了漾稀?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵模闲,是天一觀的道長。 經(jīng)常有香客問我崭捍,道長尸折,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任殷蛇,我火速辦了婚禮实夹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘粒梦。我一直安慰自己亮航,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布匀们。 她就那樣靜靜地躺著缴淋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上重抖,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天露氮,我揣著相機與錄音,去河邊找鬼钟沛。 笑死畔规,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的恨统。 我是一名探鬼主播叁扫,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼畜埋!你這毒婦竟也來了陌兑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤由捎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后饿凛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狞玛,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年涧窒,在試婚紗的時候發(fā)現(xiàn)自己被綠了心肪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡纠吴,死狀恐怖硬鞍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情戴已,我是刑警寧澤固该,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站糖儡,受9級特大地震影響伐坏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜握联,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一桦沉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧金闽,春花似錦纯露、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春组橄,著一層夾襖步出監(jiān)牢的瞬間荞膘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工玉工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留羽资,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓遵班,卻偏偏與公主長得像屠升,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子狭郑,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

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

  • React中創(chuàng)建組件 第一種 - 創(chuàng)建組件的方式 使用構(gòu)造函數(shù)來創(chuàng)建組件腹暖,如果要接收外界傳遞的數(shù)據(jù),需要在構(gòu)造函數(shù)...
    AizawaSayo閱讀 225評論 0 0
  • Learn from React 官方文檔 一翰萨、Rendering Elements 1. Rendering a...
    恰皮閱讀 2,664評論 2 3
  • 這次主要針對react state和props這兩個元素進行分析 state: 在react只需更新組件的stat...
    ybrelax閱讀 139評論 0 2
  • 組件的數(shù)據(jù)掛載方式 屬性(props) props是正常是外部傳入的脏答,組件內(nèi)部也可以通過一些方式來初始化的設(shè)置,屬...
    千鋒HTML5學院閱讀 267評論 0 1
  • 一. React 概述 React是一個視圖層的框架(庫)亩鬼。在傳統(tǒng)的方式中殖告,我們通過編寫HTML代碼來設(shè)計網(wǎng)頁的結(jié)...
    Even_Cyw閱讀 238評論 0 0