了解react记录2-生命周期

高阶函数

如果一个函数符合下面2个规范中的任何一个,那该函数就是高阶函数。

  • 1.若A函数,接收的参数是一个函数,那么A就可以称之为高阶函数。
  • 2.若A函数,调用的返回值依然是一个函数,那么A就可以称之为高阶函数。I常见的高阶函数伺

函数的柯里化:通过函数调用继续返回函数的方式,实现多次接收参数最后统一处理的函数编码形式。

生命周期

挂载(mount):当clock 组件第一次被渲染到DOM中的时候,就为其设置一个计时器。
卸载(unmount):当DOM中clock组件被删除的时候,应该清除计时器。

  • 生命周期钩子调用顺序和个人调用顺序没关系,由框架决定。
    函数名称:生命周期回调函数、生命周期钩子函数、生命周期函数、生命周期钩子

  • 1、构造器函数 【constructor(){}

  • 2、挂载前 【componentWillMount(){}

  • 3、初始化 【render(){}】 // 初始化渲染、状态更新后

  • 4、挂载后 【componentDidMount(){}】 //组件挂载完毕执行

  • 5、卸载组件前 【componentwillUnmount(){}】 // 组件将要卸载时执行

卸载组件:【ReactDOM.unmountComponentAtNode(document.getElementById('test')) 】

其他钩子函数:
旧生命周期图

  • 1、setState() 修改状态更新 --> 【shouldComponentUpdate(){}】相当于阀门,决定是否更新,返回true往下走,false则终止。默认返回true -->
  • 2、forceUpdate() 强制更新 --> 【componentWillUpdate(){}】更新前执行的函数 -->
  • -->【componentDidUpdate(){}】更新后执行的函数。

组件父子关系: 在A组件中引用B组件,A即是B组件的父组件。
props的传递: 在引用的B标签中直接定义标签属性传递过去。

  • 3、【compenentWillReceiveProps(props){}】子组件将要接收传递过来的props前执行,第一次接收props时不会调用。

新生命周期图

新版生命周期把旧版中带【will】的钩子函数进行了改进。

  • static getDerivedStateFromProps(props,state){}】 需返回[从props派生的state]或[null]。若state的值在任何时候都取决于props,那么可以使用getDerivedStateFromProps
  • static getSnapshotBeforeUpdate(prevProps,prevState){}】 需返回[快照值]或[null]。返回值作为参数传递给【componentDidUpdate()】。

虚拟DOM中key作用:

状态中的数据发生变化时,react会根据【新数据】生成【新的虚拟DOM】,随后React进行【新虚拟DOM】与【旧虚拟DOM】的diff比较,比较规则如下:

  • 1、旧虚拟DOM中找到与新虚拟DOM相同的key:
    内容没变,直接使用之前的真实DOM
    若虚拟DOM中内容变了,则生成新的真实DOM,随后替换掉页面中之前的真实DOM

  • 2、旧虚拟DOM中未找到与新虚拟DOM相同的key:
    根据数据创建新的真实DOM,随后渲染到到页面

  • 用index作为key可能会引发的问题:
    ① 若对数据进行逆序添加、逆序删除等破坏顺序操作:会产生没有必要的真实DOM更新-->界面效果没问题,但效率低。
    ② 如果结构中还包含输入类的DOM:会产生错误DOM更新-->界面有问题。

注意!如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表用于展示,使用index作为key是没有问题的。开发中最好用唯一标识作为key

原文地址:https://www.cnblogs.com/xiaoaiying/p/14195122.html