国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

react實(shí)現(xiàn)pure render時(shí)bind(this)隱患需注意!

2019-11-19 17:12:54
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

pure render 我就不多說(shuō)了,附上我另一片文章鏈接 react如何性能達(dá)到最大化(前傳)

不論你用不用immutable,只要你想達(dá)到pure render,下面值得你注意!

一天我和往常一樣,開(kāi)開(kāi)心心得寫(xiě)著react,用著@pureRender,

export default class extends Component {... render() {  const {name,age} =this.state;  return (   <div>    <Person name={name} age={age} onClick={this._handleClick.bind(this)}></Person>//bug 所在   </div>  ) }...}

發(fā)現(xiàn)一個(gè)問(wèn)題,對(duì)于Person這個(gè)子組件來(lái)說(shuō),在父組件re-render的時(shí)候,即使Person得前后兩個(gè)props都沒(méi)改變,它依舊會(huì)re-render,即使用immutable.js也不好使。

原來(lái)啊,父組件每次render,_handleClick都會(huì)執(zhí)行bind(this) 這樣_handleClick的引用每次都會(huì)改,所以Person前后兩次props其實(shí)是不一樣的。

那怎么辦?把bind(this)去掉?不行 還必須得用

真正的答案是 讓父組件每次render 不執(zhí)行bind(this),直接提前在constructor執(zhí)行好,修改之后

export default class extends Component { constructor(props){  super(props)  this._handleClick=this._handleClick.bind(this)//改成這樣 } render() {  const {name,age} =this.state;  return (   <div>    <Person name={name} age={age} onClick={this._handleClick}></Person>   </div>  ) }...}

參考:React.js pure render performance anti-pattern

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 垣曲县| 花垣县| 建湖县| 淅川县| 年辖:市辖区| 扶风县| 黎城县| 连南| 边坝县| 阳朔县| 柳州市| 扎囊县| 永和县| 萝北县| 惠东县| 昆山市| 常熟市| 綦江县| 额尔古纳市| 东源县| 南和县| 教育| 城固县| 长宁区| 永善县| 方山县| 海淀区| 锦屏县| 上饶县| 定安县| 平谷区| 大关县| 宁国市| 报价| 称多县| 庆云县| 万山特区| 临清市| 石门县| 建阳市| 井冈山市|