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

首頁(yè) > 語言 > JavaScript > 正文

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

2024-05-06 15:09:57
字體:
供稿:網(wǎng)友

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

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

一天我和往常一樣,開開心心得寫著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è)問題,對(duì)于Person這個(gè)子組件來說,在父組件re-render的時(shí)候,即使Person得前后兩個(gè)props都沒改變,它依舊會(huì)re-render,即使用immutable.js也不好使。

原來啊,父組件每次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í)有所幫助,也希望大家多多支持錯(cuò)新站長(zhǎng)站。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 云梦县| 泰和县| 桃园县| 库伦旗| 黎平县| 阜城县| 宁化县| 晋城| 宁阳县| 尉氏县| 华亭县| 吉木萨尔县| 蒲江县| 临城县| 常山县| 台中市| 科尔| 石林| 福贡县| 会昌县| 祁连县| 茂名市| 镇沅| 九江市| 尚义县| 新乡县| 丹棱县| 黄平县| 公安县| 河南省| 苏尼特左旗| 闸北区| 阜城县| 商丘市| 铜山县| 上饶县| 革吉县| 石林| 隆昌县| 松潘县| 砚山县|