平時(shí)我獲取父組件 的props庭再, 都是在子組件函數(shù)里? this.props.xxxx
父組件這樣寫
子組件這樣寫
這種情況颂暇,子組件在 componentDidMount 里面可以拿到 props腺兴,因?yàn)?父組件的值不是異步的拜银。
然而梭灿,當(dāng)父組的的值是異步缔逛,不如AJAX請(qǐng)求數(shù)據(jù)备埃,子組件的componentDidMount 就獲取不到 父組件的 props
父組件
子組件componentDidMount 里是拿不到 props
怎么解決這個(gè)問(wèn)題呢, 這時(shí)候褐奴,componentWillReceiveProps 就顯神威了按脚,
看了生命周期,上面問(wèn)題敦冬,用componentWillReceiveProps?
完美解決問(wèn)題
下面介紹一個(gè)生命周期的定義:
1)componentWillMount(){}
在客戶端和服務(wù)器上辅搬,在初始渲染發(fā)生之前立即調(diào)用一次 如果在這個(gè)方法中調(diào)用setState,
render()將看到更新的狀態(tài)脖旱,并且只會(huì)執(zhí)行一次堪遂,盡管狀態(tài)改變。
2)componentDidMount(){}
?調(diào)用一次萌庆,只在客戶端(不在服務(wù)器上)溶褪,在初始渲染發(fā)生后立即 子組件的componentDidMount()方法在父組件的componentDidMount()方法之前被調(diào)用 setTimeout? setInterval? AJAX 在此之行,強(qiáng)烈建議
3)componentWillReceiveProps(nextProps){}
?在組件接收新props時(shí)調(diào)用践险。初始渲染不調(diào)用此方法猿妈。老的props可以用this.props? 新值就用nextProps查看 在此函數(shù)中調(diào)用this.setState()不會(huì)觸發(fā)附加的渲染。
4)shouldComponentUpdate(nextProps, nextState){}
?當(dāng)正在接收新的道具或狀態(tài)時(shí)巍虫,在渲染之前調(diào)用彭则。 此方法必須返回falseortrue否則報(bào)錯(cuò)true則渲染,false則不渲染占遥!在此聲明周期中可以考慮是否需要進(jìn)行渲染贰剥!避免不必要的性能浪費(fèi)// 如果shouldComponentUpdate返回false,那么render()將被完全跳過(guò)筷频,直到下一個(gè)狀態(tài)改變蚌成。此外,不會(huì)調(diào)用componentWillUpdate和componentDidUpdate凛捏。 默認(rèn)返回true// 如果性能是一個(gè)瓶頸担忧,特別是有幾十個(gè)或幾百個(gè)組件,請(qǐng)使用shouldComponentUpdate來(lái)加快您的應(yīng)用程序坯癣。returntrueorfalse
5)?componentWillUpdate(nextProps, nextState){}
當(dāng)正在接收新的props或state時(shí)立即調(diào)用瓶盛。初始渲染不調(diào)用此方法// 您不能在此方法中使用this.setState()。如果您需要更新state以響應(yīng)prop更改示罗,請(qǐng)改用componentWillReceiveProps惩猫。
6)componentDidUpdate(nextProps, nextState){}
在組件的更新刷新到DOM后立即調(diào)用。初始渲染不調(diào)用此方法蚜点。當(dāng)組件已更新時(shí)轧房,使用此操作作為DOM操作的機(jī)會(huì)
7)componentWillUnmount(){}
?在組件從DOM卸載之前立即調(diào)用。在此方法中執(zhí)行任何必要的清理绍绘,例如使計(jì)時(shí)器無(wú)效或清除在componentDidMount中創(chuàng)建的任何DOM元素奶镶。clearInterval or destroy