美文网首页
React组件生命周期中的相关函数(记录/收藏)

React组件生命周期中的相关函数(记录/收藏)

作者: 冰Q | 来源:发表于2017-10-25 16:05 被阅读31次

component是通过自定义的几个函数来控制组件在生命周期中的各个阶段动作(本处所写的state同意指当前组件内部定义的state)

  • constructor(props, context)
构造函数,在创建组件的时候调用一次,props为父组件传到子组件中的所有属性集合
  • componentWillMount()
在组件加载前执行一次,如果在该处更新state,组件渲染时是读取到的是最新的state。
  • componentDidMount()
在组件加载后执行一次,此时组件已渲染过一次,可调用this.refs获取DOM节点
  • componentWillReceiveProps(nextProps)
nextProps是父组件传递给子组件的最新props。子组件已加载,父组件发生render的时候子组件就会
调用componentWillReceiveProps(不管props有没有更新,也不管父子组件之间有没有数据交换)
  • shouldComponentUpdate(nextProps, nextState)
返回boolean值,默认返回true。nextProps是父组件传递给子组件的最新props,nextState为子组件最新的state。
通过返回true/false来控制子组件是否需要重新渲染。有一些数据的改变并不需要重新渲染,在该处就可以拦截,做优化处理。
  • componentWillUpdate(nextProps, nextState)
shouldComponentUpdate返回true或者调用forceUpdate之后,componentWillUpdate会被调用
  • componentDidUpdate(preProps, preState)
除了首次render之后调用componentDidMount,其它render结束之后都是调用componentDidUpdate。

componentWillMount、componentDidMount和componentWillUpdate、componentDidUpdate可以对应起来。区别在于,前者只有在挂载的时候会被调用;而后者在以后的每次更新渲染之后都会被调用。

  • componentWillUnmount()
组件被卸载的时候调用。一般在componentDidMount里面注册的事件需要在这里删除。
触发render方法

在react中,触发render的有4条路径。

以下假设shouldComponentUpdate都是按照默认返回true的方式。

  • 首次渲染Initial Render

  • 调用this.setState (并不是一次setState会触发一次render,React可能会合并操作,再一次性进行render)

  • 父组件发生更新(一般就是props发生改变,但是就算props没有改变或者父子组件之间没有数据交换也会触发render)

  • 调用this.forceUpdate

常用语法
  • class 属性需要写成 className ,for 属性需要写成 htmlFor ,这是因为 class 和 for 是 JavaScript 的保留字。
  • style={{}} 最外层{}告诉jsx这是js语法,而里面的{}表示样式包裹成对象
  • this.props 获取当前组件的props属性对象。
  • this.state 获取当前组件的state状态值对象
  • this.setState 更新当前组件state状态值对象(使用redux后不建议在组件内使用自身的state)
  • this.props.children 获取组件的所有子节点,使用React.Children.map来遍历,从而忽略掉this.props.children返回值的类型
  • this.refs.[refName] 获取真实DOM节点,故必须在组件render后调用
<input type="text" ref="myTextInput" />
获取该节点:this.refs.myTextInput;
  • PropTypes 用来验证组件的props入参是否符合要求
Index.propTypes = {
  value: PropTypes.string.isRequired,
  onIncreaseClick: PropTypes.func.isRequired,
  onReduceClick: PropTypes.func.isRequired
}
  • key 循环输出元素时,用来唯一标识同父同层级的兄弟元素,当React作diff时,只要子元素有key属性,便会去原v-dom树中相应位置(当前横向比较的层级)寻找是否有同key元素,比较它们是否完全相同,若是则复用该元素,免去不必要的操作。故不推荐用数组index来作为key,可用数据对象的某个唯一属性,或是对数据进行hash来生成key。
  • 求值表达式 使用{}包起来,在{}中不能直接使用if/for语句,但可以返回值表达式
  • 条件判断 使用三元表达式来期待if-else,善用比较运算符“ || ”
  • 函数表达式 使用(function(){})()来强制执行函数,返回值
  • 注释 {/* 一般注释, 用 {} 包围 */}

React框架把component看作一个状态机,通过改变状态值来控制页面view的输出,其实你可以看成React框架注重数据与DOM的分离,用数据变化来控制DOM的变化,不同于jQuery直接对DOM对象的操作。

  • 向react中插入HTML字符串
<div className="place_list" dangerouslySetInnerHTML={{__html: mapPlace()}} onClick={this.handleChooseCity.bind(this)}>
</div>
  • 在react的组件中实现路由跳转 this.props.history.push(url)

相关文章

  • react-native的组件生命周期

    react-native的组件生命周期 组件的相关方法 render 每个组件必须提供render方法。说该函数不...

  • 四:React 进阶三 (生命周期)

    react(一):组件的生命周期 生命周期函数 在组件运行的某个时刻,会被自动执行的一些函数。 React生命周期...

  • React组件生命周期中的相关函数(记录/收藏)

    component是通过自定义的几个函数来控制组件在生命周期中的各个阶段动作(本处所写的state同意指当前组件内...

  • React生命周期

    React生命周期 React中组件也有生命周期,也就是说也有很多钩子函数供我们使用, 组件的生命周期,我们会分为...

  • React组件介绍

    组件介绍 React中组件主要可分为函数组件和类组件,两者区别是函数组件没有state和生命周期,故函数组件也称为...

  • react随记4 State&生命周期

    State&生命周期 React中组件生命周期如下图: 从上图中也可以看出,组件在构造函数中有state,也就是状...

  • React生命周期及组件通信

    组件的生命周期 React中组件也有生命周期,也就是说也有很多钩子函数供我们使用, 组件的生命周期,我们会分为四个...

  • React学习笔记(三)

    组件的生命周期 React中组件也有生命周期,也就是说也有很多钩子函数供我们使用, 组件的生命周期,我们会分为四个...

  • 2020-09-11

    REACT生命周期 (JS胖老师课程 ) 生命周期函数指在某一个时刻组件会自动调用执行的函数 REACT生命周期的...

  • React入门系列(四)组件的生命周期

    React的核心是组件,组件在创建和渲染的过程中,需要调用固定的钩子函数,也称为组件的“生命周期”。利用生命周期函...

网友评论

      本文标题:React组件生命周期中的相关函数(记录/收藏)

      本文链接:https://www.haomeiwen.com/subject/nywqpxtx.html