ReactNative优化--- Pure Render

一切界面变化都是 状态state变化

React会自动技术状态的差异部分,以最小的差异去重新渲染

在内存中“打草稿计算差异”,这一概念称为Virtual Dom。然而打草稿也是要开销的,所以能不打则不打

image.png

PureComponent

从0.32版本开始引入新的PureComponent代替了老的PureRenderMixin

  shouldComponentUpdate(nextProps,nextState){
      return shallowCompare(this,nextProps,nextState);
      //对props和state进行比较
  }

如果你的props和state都是值/原始类型:string,number,boolean,null,undefined,symbol,那么直接把Component替换为PureComponent即可。

引用类型和immutable原则

引用类型即Object,又包括array,function;
引用类型的浅比较实际为比较其指针地址,修改引用类型的值,其指针地址不会变,
如果使用PureComponent,而props/state含有引用类型,则需要遵循immutable原则---不能修改其原值;

immutable典型用例

复制原值再修改

    //1
    handleClick(){
         const words = this.state.words;
         words.push("maker");
         this.setState({words:words});
   }
    //2
    handleClick(){
         this.setState(prevState =>( {
             words:prevState.words.contact(['maker'])
         }));
   }
    //3
    handleClick(){
         this.setState(prevState =>( {
             words:[...prevState.words,'maker'],
         }));
   }

注意内联属性与函数

错误使用

    render(){
        return(
              <Button data={[1,2,3]} onPress={()=>{alert("alert")}} />
        )
     }

修改

   onPress = ()=>{
         alert("alert");
   }
   render(){
       this.data= [1,2,3];
       return(
              <Button data={this.data} onPress={this.onPress} />
        )
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 深入JSX date:20170412笔记原文其实JSX是React.createElement(componen...
    gaoer1938阅读 8,112评论 2 35
  • 本文基于React^15.6.1 Redux^3.7.1 Immutable^4.0.0-rc.2 Immutab...
    公里柒阅读 2,289评论 0 4
  • 以下内容是我在学习和研究React时,对React的特性、重点和注意事项的提取、精练和总结,可以做为React特性...
    科研者阅读 8,303评论 2 21
  • 307、setValue:forKey和setObject:forKey的区别是什么? 答:1, setObjec...
    AlanGe阅读 1,604评论 0 1
  • 我将杀死一只鸟 以便俘获,那支最美丽的羽毛 我无从看到,它那死于无辜的眼神 但我会为它祈祷,我把它葬在了树上 我将...
    Whale小诺阅读 175评论 2 1