## react的生命周期分为三个阶段,分别是mount, update, unmount
### 1. 装载阶段
- 在老的版本里面,会有 `getDefaultProps` 和 `getInitialState` 两个方法
- 在新的版本里面,我们直接在 `constructor` 里面去初始化 `state`, 用静态方法 `defaultProps` 初始化默认的 `props`
- 接下来就会走到 `componentWillMount`,
- 这是唯一一个可以直接修改 `state` 的地方,一般也不会常用这个东西,因为在react17以后会使用异步渲染,所以这个生命周期即将被废弃掉,使用异步渲染后 `componentWillMount` 生命周期有可能不止执行多次,这是官网上说的。
- 一般来说很多人可能会想要在 `componenentWillMount` 里面做数据请求,以为这样第一次 `render` 的数据就是最新的,但这样的想法是错的,因为ajax请求本身就是异步的。但实际上我们应该在 `componenentDidMount` 里面做数据请求,因为 `componenentWillMount` 和 `componenentDidMount` 之间的时间间隔很短,几乎没有
- `componentWillMount` 执行完了之后会执行 `render`, 在这里会合成虚拟 `dom`
- 最后是 `componenentDidMount`, 这个时候才会把真实的 `dom` 节点挂载到浏览器里面,要使用真实的 `dom` 节点的话应该在 `componenentDidMount` 节点中做
### 2. 更新阶段(第二阶段更新阶段,更新阶段分为几种方式)
- 第一种是 `falseUpdate`, 这个一般来说不建议使用。然后说说另外两种方式
- 一个是 `setState` 之后,如果 `state` 有改变的话会走一个 `shouldStateUpdate` 的生命周期;另一个是当 `props` 有改变的话,会先走一个 `WillReceiveProps` 的生命周期,再去走 `shouldComponentUpdate`, `shouldComponentUpdate` 这个生命周期会 `return` 一个布尔值, 如返回 `true`, 就会继续下面的生命周期,如果返回 false 就停留在上次的状态。
- 说一下 `return true` 的情况,在这之后会执行 `componenentWillUpdate` 阶段,然后再执行 `render` 和 `componenentDidUpdate`
- 前面说到 `props` 发生改变之后 `WillReceiveProps` 会去执行,里面可以根据上一次的 props 来重新更改 `state`, 这个方法也即将被废弃,于是我们可以使用一个静态方法 `static getDerivedStateFromProps` 来替代,由于这是一个静态方法,里面没有 `this`, 直接 `return` 一个 `object`, 它的参数就是 `props`
- 这就是更新阶段。然后会进入到销毁阶段
### 3. 销毁阶段
- 在销毁阶段会进入到一个 componenentWillUnmount 的生命周期,在这里可以进行一些清除定时器的操作
- 前端综合问题
- 【01】工作中你是如何检测浏览器兼容问题的?
- 【02】手机端怎么适配?
- 【03】你对手机平台安装包后缀的理解
- 【04】你所了解的Web攻击技术
- 【05】如何防止XSS攻击?
- 【06】项目开发过程中都用过什么框架?
- 【07】一般情况下,端口号的取值范围是多少?
- 【08】简述http常见的状态码及含义
- 【09】CommonJS,AMD,CMD区别
- 【10】Svn与Git的区别
- 【11】http请求方式有几种?分别是什么?
- 【12】请你谈谈cookie的弊端?
- 【13】window对象常用的属性和方法有那些
- 【14】你有哪些性能优化的方法?
- 【15】web页面重构怎么操作?
- 【16】线程与进程的区别是什么?
- 【17】什么是WEB标准?什么是W3C标准?
- 【18】行内元素有哪些? 块级元素有哪些? CSS的盒模型?
- 【19】你如何优化自己的代码?
- 【20】如何实现浏览器内多个标签页之间的通信?
- 【21】请谈一下你对网页标准和标准制定机构重要性的理解
- 【22】浏览器是如何渲染页面的
- 【23】从输入url到显示页面,都经历了什么
- 【24】谈谈垃圾回收机制方式及内存管理
- 【25】请解释JSONP的工作原理,以及它为什么不是真正的AJAX
- 【26】http 和 https 有何区别?如何灵活使用?
- 【27】浏览器缓存有哪些,通常缓存有哪几种
- 【28】xml和json的区别
- 手写代码及阅读题
- 【01】计算1-10000中出现的0 的次数
- 【02】写一个兼容的function,清除字符串前后的空格
- 【03】请对一个数组的数组从小到大进行排序
- 【04】以下代码输出什么[空函数返回值]
- 【05】下面代码输出什么?[各种类型拼接]
- 【06】常用的两种函数声明有什么区别?
- 【07】请计算一个对象的长度
- 【08】看下面代码,给出输出结果[计时器]
- 【10】看下列代码,输出什么? [null相关]
- 【11】写一个正则,字母开头,后面可以是数字,下划线,字母,长度6-30
- 【12】以下代码的alert的值分别是多少?
- 【13】如何获取三个数中的最大值和最小值?
- 【14】数组去重几种方法是什么?
- 【15】求数组中的最大值
- 【16】求数组中的最小值
- 【17】获得每个月1号是星期几?
- 【18】将字符串转化为驼峰表示法
- 逻辑题目
- 【01】1元1瓶汽水,2个空瓶再换1瓶汽水,30元最多能喝几瓶?
- 【02】有8个球体,外观一样,但有1个球比其他7个球重,给你一个天平,几次能找出那个较重的球?
- CSS3
- 【01】把一个div变成圆左边蓝色 右边绿色
- 【02】css盒模型有哪些及区别
- 【03】什么是css盒模型
- 【04】如何让英文小写转换为大写
- 【05】 去掉inline-block元素间隙的几种方法
- 【06】less和sass的特点和区别
- 【07】什么叫优雅降级和渐进增强?
- 【08】rgba和opacity的透明何不同?
- 【09】css选择器有那些?CSS3新增了哪些
- 【10】CSS3有哪些新特性?
- 【11】display属性有哪些?
- 【12】box-sizing的属性和作用
- 【13】CSS样式覆盖规则
- HTML5
- 【01】请列举5个html5输入类型?并简要描述其用途?
- 【02】em和rem的区别?
- 【03】精灵图和base64 如何选择,或者字体图标什么时候使用?
- 【04】position定位有几种?有什么区别?哪几个是脱离文档流的?
- 【05】垂直水平居中的方法有几种?
- 【06】清除浮动的方法有哪些?
- 【07】link和import的区别
- 【08】opacity/visibility/display 隐藏对比
- 【09】XHTML和HTML有什么区别
- 【10】什么是语义化的HTML?
- 【11】常见的浏览器内核有哪些?
- 【12】HTML5有哪些新特性,移除了哪些元素?
- 【13】如何处理HTML5新标签的浏览器兼容问题?
- 【14】HTML5为什么只需要写!DOCTYPE HTML?
- 【15】介绍以下你对浏览器内核的理解?
- 【16】行内元素有哪些?块级元素有哪些?
- 【17】标签上title与alt属性的区别是什么?
- 【18】前端页面有哪三层构成是什么?作用是什么?
- 【19】H5特点有哪些?
- 【20】HTML5里的video标签支持哪些视频格式?
- 【21】margin-top父元素塌陷及解决办法
- 【22】透明度opacity的兼容写法
- 【23】让一行文字在固定宽度div里显示省略号的方法
- 【24】如何解决input和select的宽高不一致问题
- 【25】如何解决div与内部img间隙问题
- 【26】这个要改一下
- 【27】input设置为readonly和disable有什么区别?
- 【28】谈谈对BFC的理解
- 【29】简述src与href的区别
- 【30】什么是外边距重叠?以及防止方法
- 【31】HTML5 Input 表单新增输入类型
- 【32】HTML5语义化标签有哪些
- 【33】html常见兼容性问题
- 【34】Doctype的作用?严格模式与混杂模式的区别?
- 【35】HTML与XHTML的区别?
- 【36】input有那些类型?
- 【37】 img的alt与title有何异同?strong与em的异同?
- 【38】px和em的区别是什么?你还了解那些单位?
- 【39】把 Script 标签 放在页面的最底部的body封闭之前 和封闭之后有什么区别?浏览器会如何解析它们?
- 【40】什么是雪碧图?它作用是什么?
- Javascript
- 【01】简述ajax请求过程,以及注意事项。
- 【02】post和get的区别?
- 【03】简述jsonp跨域原理,以及你知道的其他跨域方法
- 【04】JSONP与JSON的区别
- 【05】谈谈对http和https的理解
- 【06】var let const 的区别是什么?
- 【07】简述“==”与“===”的区别?
- 【08】javascript各类型在转换为boolean式的规则?
- 【09】Object.creat()和new对象有什么区别?
- 【10】for in和Object.keys来遍历对象有什么区别?
- 【11】Object.assign()函数的作用及用法
- 【12】数组的常用方法有那些?
- 【13】js中内置 对象有哪些有哪些?
- 【14】控制台undefined和is not defined异常区别?
- 【15】JS中面向对象和面向过程的区别
- 【16】什么是脚本?
- 【17】cookies、sessionStorage和localStorage区别?
- 【18】谈一下你对面向对象的理解?
- 【19】什么是函数?
- 【20】正则验证,match()与test()函数的区别?
- 【21】什么是闭包?简述的优缺点
- 【22】Es6新特性有哪些?
- 【23】怎么判断一个object是否是数组(array)?
- 【24】函数声明和函数表达式的区别?
- 【25】this一般的指向,以及如何改变指向
- 【26】javascript的typeof返回哪些数据类型(和37重复了)
- 【27】列举IE和标准下有哪些兼容性的写法
- 【28】new操作符具体干了什么呢?
- 【29】什么是Json?
- 【30】js中的3种弹出式命令什么
- 【31】节点的种类有几种,分别是什么?
- 【32】Void(0)的作用是什么?
- 【33】箭头函数和普通函数的区别
- 【34】怎么获取对象的key值
- 【35】谈谈你对原型链的理解
- 【36】Javascript如何实现继承?
- 【37】typeof返回哪些数据类型
- 【38】创建函数的几种方式?
- 【39】js中同步和异步的区别
- 【40】事件绑定和普通事件有什么区别?
- 【41】documen.write和 innerHTML的区别?
- 【42】JS实现继承的6种方式
- 【43】什么是事件委派以及优缺点
- 【44】JS创建对象的几种方式?
- 【45】解释js垃圾回收机制和引起内存泄漏?
- 【46】DOM怎样添加、移除、移动、复制、创建和查找节点
- 【47】null和undefined的区别?
- 【48】正则常用符号代表什么?
- 【49】callee和caller的作用?
- 【50】如何阻止事件冒泡和默认事件?
- 【51】例举3种强制类型转换和2种隐式类型转换?
- 【52】JavaScript是一门什么样的语言,它有哪些特点?
- 【53】js延迟加载的方式有哪些?
- 【54】js作用域有那些
- 【55】同步和异步的区别?
- 【56】已知ID的Input输入框,希望获取这个输入框的输入值
- 【57】ajax请求的时候get 和post方式的区别
- 【58】eval()的作用
- 【59】如何用原生js给一个按钮绑定两个onclick事件?
- 【60】Javascript中的定时器有哪些?他们的区别及用法是什么?
- Node
- 【01】对nodejs的理解?
- 【02】import和require的区别
- 【03】Node.js的优点和缺点
- 框架及JS库
- 【01】jQuery如何实现事件委托?
- 【02】$(document).ready和window.onload的区别?
- 【03】v-if与v-show区别
- 【04】mvc和mvvm模式区别
- 【05】React早期创建组件的方式
- 【06】export与export default 的区别
- 【07】简述一下 Handlebars 的基本用法?
- React
- 【01】对React生命周期的理解
- 【02】React创建组件的三种方式及其区别是什么?
- 【03】react和vue有哪些不同,说说你对这两个框架的看法