React生命周期(新)

重要的鉤子

1.render:初始化渲染或更新渲染調(diào)用
2.componentDidMount:開啟監(jiān)聽节榜,發(fā)送ajax請(qǐng)求
3.componentWillUnmount:收尾工作

生命周期(新)

1.初始化階段:由ReactDOM.render()觸發(fā)—初次渲染
(1). constructor
(2). getDerivedStateFromProps //從Props得到一個(gè)派生的狀態(tài)肥照,即state的值任何時(shí)候都取決與props淹仑,派生狀態(tài)會(huì)導(dǎo)致代碼冗余組件難以維護(hù)挺狰,罕見
(3). render()
(4). componentDidMount() ===>常用:開啟定時(shí)器只损,發(fā)送網(wǎng)絡(luò)請(qǐng)求壮不,訂閱消息

2.更新階段:由組件內(nèi)部this.setState()或父組件重新render觸發(fā)
(1). getDerivedStateFromProps
(2). shouldComponentUpdate()
(3). render()
(4. getSnapshotBeforeUpdate //得到快照
(5). componentDidUpdate()

3.卸載組件:由ReactDOM.unmountComponentAtNode()觸發(fā)
(1). componentWillUnmount() ===>常用:關(guān)閉定時(shí)器蔼夜,取消訂閱消息

      class Add extends React.Component{
            
            constructor(props){
                  console.log("1.constructor")
                  super(props)
                  this.state = { count:0 } 
            }

            state = { count:0 }
            
            add = ()=>{
                  const {count} = this.state
                  this.setState({ count:count+1 })
            }

            death =  ()=>{
                  ReactDOM.unmount(document.getElementById('test'))
            }
            
            //強(qiáng)制更新不改狀態(tài)
            force = ()=>{
                  this.forceUpdate()
            }

            //從Props得到一個(gè)派生的狀態(tài)判呕,即state的值任何時(shí)候都取決與props尘喝,派生狀態(tài)會(huì)導(dǎo)致代碼冗余組件難以維護(hù)磁浇,罕見
            static getDerivedStateFormProps(props,state){
                  console.log("getDerivedStateFormProps");
                  console.log(props);
                  console.log(state);
                  return props
            }

            //在更新之前獲取快照
            getSnapshotBeforeUpdate(prevProps,prevState){
                  console.log("getSnapshotBeforeUpdate");
                  return null
            }
            
            //組件掛載完畢的鉤子
            componentDidMount(){
                  console.log('4.componentDidMount');
            }            
            
            //組件將要卸載的鉤子
            componentWillUnmount(){
                  console.log('conponentWillUnmount');
            }

            //控制組件更新的"閥門"
            shouldComponentUpdate(){
                  console.log('shouldComponentUpdate');
                  return true
            }

            //組件更新完畢的鉤子
            componentDidUpdate(prevProps,prevState,snapshotValue){
                  console.log('componentDidUpdate',preProps,prevState,snapshotValue);
            }

            render(){
                  console.log('3.render');
                  const { count } = this.state
                  return(
                        <div>
                              <h2>當(dāng)前求和為</h2>
                              <button onClick="this.add">點(diǎn)我+1</button>
                              <button onClick="this.death">卸載組件</button>
                              <button onClick="this.force">不更改任何狀態(tài)中的數(shù)據(jù),強(qiáng)制更新一下</button>
                        </div>
                  )
            }
      }
      ReactDOM.render(<Count count="199" />,document.getElementById('test'))

getSnapshotBeforeUpdate
      class NewsList extends Reac.Component{
            state = {newsArr:[]}
            componentDidMount(){
                  setInterval(()=>{
                        const {newsArr} = this.state
                        const news = '新聞'+(newsArr.length+1)
                        this.setState({news,[news,...newsArr]})
                  },1000)
            }
            getSnapshotBeforeUpdate(){
                  return this.refs.list.scrolHeight
            }
            componentDidUpdate(preProps,preState,height){
                  this.refs.list.scrollTop += this.refs.list.scrolHeight-height
            }
            render(){
                  return(
                        <div class="list" ref="list">
                        {
                              this.state.newsArr.map((n,index)=>{
                                    return <div 
key={index} class="news">新聞{n}<div>
                              }
                        }
                              
                        <div>
                  )
            }
      }
      ReactDOM.render(<NewList />,document.getElementById('test'))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朽褪,一起剝皮案震驚了整個(gè)濱河市置吓,隨后出現(xiàn)的幾起案子无虚,更是在濱河造成了極大的恐慌,老刑警劉巖衍锚,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件友题,死亡現(xiàn)場離奇詭異,居然都是意外死亡戴质,警方通過查閱死者的電腦和手機(jī)度宦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來告匠,“玉大人斗埂,你說我怎么就攤上這事≠旌#” “怎么了呛凶?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長行贪。 經(jīng)常有香客問我漾稀,道長,這世上最難降的妖魔是什么建瘫? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任崭捍,我火速辦了婚禮,結(jié)果婚禮上啰脚,老公的妹妹穿的比我還像新娘殷蛇。我一直安慰自己,他們只是感情好橄浓,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布粒梦。 她就那樣靜靜地躺著,像睡著了一般荸实。 火紅的嫁衣襯著肌膚如雪匀们。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天准给,我揣著相機(jī)與錄音泄朴,去河邊找鬼。 笑死露氮,一個(gè)胖子當(dāng)著我的面吹牛祖灰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播畔规,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼局扶,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起详民,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陌兑,沒想到半個(gè)月后沈跨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兔综,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年饿凛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片软驰。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涧窒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锭亏,到底是詐尸還是另有隱情纠吴,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布慧瘤,位于F島的核電站戴已,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锅减。R本人自食惡果不足惜糖儡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怔匣。 院中可真熱鬧握联,春花似錦、人聲如沸每瞒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剿骨。三九已至呐矾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間懦砂,已是汗流浹背蜒犯。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荞膘,地道東北人罚随。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像羽资,于是被迫代替她去往敵國和親淘菩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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