2.React 生命周期函数

什么是生命周期函数:在某一时刻组件会自动调用执行的函数。
import React,{ Component,Fragment } from 'react'
class Note extends Component{
//在组件创建的那一刻就会执行,不过是es6语法的,不能算生命周期函数
//Initialization初始化时在这里定义state,接收props
constructor(props){
super(props);
//当组件的state,props发生改变的时候render会重新执行
this.state={
inputValue:'',
list:[112]
}
}
//组件第一次即将被挂载到页面的时候,自动执行
componentWillMount(){
console.log('componentWillMount');
}
//组件组件第一次挂载到页面之后,自动被执行
componentDidMount(){
console.log('componentDidMount');
//在这里获取ajax数据,componentDidMount只执行一次
this.init(this.props);
}
init = (props)=>{
//存放ajax接口
}
//一个组件要从父组件接受参数
////只要父组件的render函数被重新执行了,子组件的这个生命周期函数就会被执行
//////只要父组件的render函数被执行了,子组件的这个componentWillReceiveProps函数就会被执行
//如果这个组件第一次存在于父组件中,不会执行
//如果这个组件之前已经存在于父组件中,才会执行
//对于顶层组件不会执行这个生命周期函数
componentWillReceiveProps(){
console.log('child componentWillReceiveProps');
}
//组件需要更新吗,返回的是一个Boolean值,如果返回true,componentWillUpdate、 render、componentDidUpdate 会执行,如果返回false不会执行componentWillUpdate、 render、componentDidUpdate函数
//组件跟新之前,他会被自动执行
//接下来props变化成什么样,接下来state会变化成什么样
shouldComponentUpdate(nextProps,nextState){
console.log('shoundComponentUpdate');
//接收的props不等于当前的props时会重新渲染,否则不会,提升了性能
if(nextProps.content !==this.props.content){
return true;
}
else{
return false;
}
}
//当shouldComponentUpdate返回true时,在重新渲染之前(render)之前会被执行
//组件跟新之前,他会自动执行,但是他会在shouldComponentUpdate之后被执行
//如果shouldComponentUpdate返回true它才执行
//如果shouldComponentUpdate返回false就不会执行了
componentWillUpdate(){
console.log('componentWillUpdate');
}
//当shouldComponentUpdate返回true时,在重新渲染之后(render)之后会被执行
componentDidUpdate(){
console.log('componentDidUpdate')
}
//当这个组件即将被从页面中剔除的时候,会被执行
componentWillUnmount(){
console.log('componentWillUnmount');
}
handelInput = (e)=>{
console.log(e.target.value);
//调用setState改变state的值就是更新组建的内容,render重新执行,用最新的数据渲染出模板
this.setState({inputValue:e.target.value});
}
addItem =()=>{
const {list,inputValue} = this.state;
this.setState({list:[...list,inputValue],inputValue:''})
}
removeItem = (index)=>{
console.log(index);
const {list,inputValue} = this.state;
let newList = list;
newList.splice(index,1);
this.setState({list:newList});
}
//数据(props 或者state)发生改变的时候,会被执行
//父组件的render执行后,子组件的render函数也会被执行
//render函数是组件中必须有的生命周期函数,因为这个组件是继承Copmonent组件,react这个组件内置默认了所有的生命周期函数,除了render没有内置。
render(){
console.log('render');
const {list} = this.state;
return (
<Fragment>
<input onChange={this.handelInput} value={this.state.inputValue}/>
<button onClick={this.addItem}>提交</button>
<ul>
{
list.map((item,index)=>{
return <li key={index} onClick={()=>this.removeItem(index)}>{item}</li>
})
}
</ul>
</Fragment>
)
}
}
export default Note;
//在同一个方法中多次使用setState,setState会被合并执行,对于相同属性的设置会保留最后一次设置
2.React 生命周期函数的更多相关文章
- React生命周期函数详解
React生命周期函数 生命周期函数是指在某一个周期自动执行的函数. React中的生命周期执行过程 以下是React中的常用的生命周期函数,按个部分中按照自动执行顺序列出,这几个过程可能存在同时进行 ...
- 十二、React 生命周期函数
React生命周期函数: [官方文档]:https://reactjs.org/docs/react-component.html [定义]组件加载之前,组件加载完成,以及组件更新数据,组件销毁. 触 ...
- react生命周期函数使用箭头函数,导致mobx-react问题
最近新人加入了项目,遇到了一个很奇怪的问题.mobx observable 属性,onChange的时候就是页面不会刷新. 试来试去,就是不知道什么原因,后来其他同事查到是因为componentWil ...
- react生命周期函数的应用-----1性能优化 2发ajax请求
知识点1:每次render其实就会将jax的模板生成一个虚拟dom,跟上一个虚拟dom进行比对,通过diff算法找出不同,再更新到真实dom上去. 1性能优化 每次父组件render一次(除了第一次初 ...
- react 生命周期函数介绍
constructor():构造函数 执行:组件加载钱最先调用一次,仅调用一次. 作用:定义状态机变量. 注意:第一个语句必须为super(), 否则会报错:'this' is not allowed ...
- react生命周期函数
如图,可以把组件生命周期大致分为三个阶段: 第一阶段:是组件第一次绘制阶段,如图中的上面虚线框内,在这里完成了组件的加载和初始化: 第二阶段:是组件在运行和交互阶段,如图中左下角虚线框,这个阶段组 ...
- react 生命周期函数的一些心得体会
一.理论 组件本质上是状态机,输入确定,输出一定确定 生命周期的三个阶段,三者时间是不固定的,只是在逻辑上的分类: 二.初始化阶段: getDefaultProps:获取实例的默认属性(即使没有生成实 ...
- 说一说我了解的react生命周期函数
我了解的几个阶段 Mounting 挂载 Updating 更新 Unmounting 卸载 我说几个我常用的钩子函数 1.挂载阶段Mounting 1)constructor():函数构造器 执行次 ...
- react 生命周期函数
(1)初始化阶段:getDefaultProps:获取实例的默认属性static propTypes 设置属性的类型componentWillMount:组件即将首次被装载.渲染到页面上render: ...
随机推荐
- tsung报告中Transactions Statistics缺失问题
长时间没有做性能测试,最近在使用tsung进行性能测试时,修改tsung自带的范例脚本后,运行查看结果时,发现测试报告中transactions statistics缺失,刚开始一直以为是监控中的配 ...
- hbase实践之rowkey设计
rowkey设计的重要性 rowkeys是HBase表设计中唯一重要的一点. rowkey设计要求 唯一性 存储特性 按照字典顺序排序存储 查询特性 由于其存储特性导致查询特性: 查询单个记录: 查定 ...
- pssh
步骤一:准备工作 )安装软件包 [root@proxy ~]# rpm -ivh pssh--.el7.noarch.rpm )修改/etc/hosts本地解析文件 [root@proxy ~]# c ...
- More development resources
社区 名称 官网 google https://www.google.com/ github https://github.com/ StackOverflow https://stackoverfl ...
- 策略模式(Strategy)---行为型
1 基础知识 定义:定义了算法家族,分别封装起来,让他们可以相互替换,此模式让算法的变化不会影响到使用算法的用户(应用层).特征:可以替换掉大量的if else语句 本质:分离算法,选择实现. 使用场 ...
- html([val|fn])
html([val|fn]) 概述 取得第一个匹配元素的html内容.这个函数不能用于XML文档.但可以用于XHTML文档.直线电机选型 在一个 HTML 文档中, 我们可以使用 .html() 方法 ...
- java+http文件夹上传
在web项目中上传文件夹现在已经成为了一个主流的需求.在OA,或者企业ERP系统中都有类似的需求.上传文件夹并且保留层级结构能够对用户行成很好的引导,用户使用起来也更方便.能够提供更高级的应用支撑. ...
- 顺序表元素位置倒置示例c++实现
#include <iostream> #define MAXSIZE 100 using namespace std; void reverse(int a[],int n)//对数组元 ...
- 蓝桥 log大侠
标题:Log大侠 atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠. 一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力... 变换的规则是: ...
- 「BZOJ 5010」「FJOI 2017」矩阵填数「状压DP」
题意 你有一个\(h\times w\)的棋盘,你需要在每个格子里填\([1, m]\)中的某个整数,且满足\(n\)个矩形限制:矩形的最大值为某定值.求方案数\(\bmod 10^9+7\) \(h ...