关于React

React是什么?

以前的react只是一个UI引擎,现在则是一整套前后端通吃的 Web App 解决方案,react本身是一个view层的实现,有如下三个特点:

1.声明式设计:React采用声明范式,可以轻松描述应用。

2.高效:React通过对DOM的模拟,最大限度地减少与DOM的交互。

3.灵活:React可以与已知的库或框架很好地配合。

用我自己的理解来说,react就是一个写好的组件对象,通过获取react的实例来构建组件,然后一堆堆的组件拼成一个应用,就像俄罗斯方块一样。

React的生命周期

我就不阐述jsx语法了,现在写react基本都是用的es6语法然后babel转义成es5,这里我想说的是,react提供的组件写法,其实和你平时自己构建对象是一样的,react构建了一个组件基础对象Component,我们通过继承这个对象来构建react组件

实际上生命周期这里涉及的都是围绕render方法的,组件加载前啦,加载完成啦,要不要更新啦,更新后啦,都是为了告诉render要不要更新dom。

首先我们先讨论下生命周期这一点,这个是很重要的,生命周期函数有这么几个

1.constructor

2.componentWillMount

3.componentWillReceiveProps(nextProps)

4.shouldComponentUpdate(nextProps, nextState)

5.componentWillUpdate(nextProps, nextState)

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

7.componentWillUnmount 这个就很简单了,组件移除之前会调用。这里一般会移除一下componentDidMount监听的事件

这里我们一个个来解释一下各个方法的意义以及开发时常见用法:

constructor:严格来说这个并不属于react 生命周期的一环,constructor属于es6构建对象中的方法,它会在对象示例生成的时候执行,把它放上来是因为react对象的构造器方法传入了props,我们在构造react组件的时候可能会根据传入的props来动态生成state,这也是react组件第一个执行的方法。这里写的最多的其实是重新绑定this的方法。。。

componentWillMount:组件将要被加载前,个人经验这里一般会写一些对页面ui没有影响的加载运算,绑定一些监听事件啥的。

componentWillReceiveProps:这个是在组件已经加载过了,在父组件再次调用render的时候就会执行的,注意,并不是父组件传入的props变动才会执行,只要父组件render方法执行了,就会执行这个子组件的componentWillReceiveProps方法。

shouldComponentUpdate(nextProps, nextState):这一方法主要的作用是优化,由名字可以看出来,组件是否需要更新,该函数传入两个参数,新的props和新的state,可以通过自定义对比来决定当前组件是否要再次执行render,默认返回为true,这里性能优化才需要写的,每次在你调用了setState方法就会执行,在应用变得复杂之后遇到性能瓶颈的时候可以根据需求去做进一步优化,一般是不需要理会。

componentWillUpdate(nextProps, nextState):shouldComponentUpdate返回true或者调用forceUpdate之后,这个方法就会被调用了。

componentDidMount:与这个对应的方法是componentWillMount,willMount发生在即将调用render前,这个就是发生在调用了render后,这里常见的用法是会写一些异步请求并且根据返回的数据改变当前组件的UI。

componentDidUpdate:与其对应的是componentWillUpdate方法,在组件被更新之后会调用

常见问题

Q:假如我的组件异步之后调用setState,而在这异步得到结果之前我就卸载了当前组件,提示正在对一个已卸载的Component使用setState怎么办

A:直接上方法,最简单的就是参考f8app源码的做法,异步设置state的组件内部定义一个类似isMounted方法,然后在要调用setState的时候 this.isMounted && this.setState

Tip

定义组件的时候尽量将参数props化,可以设置一些defaultProps

待更新

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,809评论 1 18
  • 目前,react组件有三种写法,分别是es5的createClass写法,es6的class写法,以及statel...
    ZoomFunc阅读 1,616评论 0 1
  • It's a common pattern in React to wrap a component in an ...
    jplyue阅读 3,248评论 0 2
  • 早上跟熊猫约好12点吃饭,我辣么准时的7:40醒来。11点多就到了,我们准备去喝粥,上电梯的时候看到必胜客广告,突...
    阿黛拉的黛阅读 268评论 0 0
  • “四位轮椅旅客?”主任乘务长申颖有点疑惑的从地服手中接过单子。“南宁航线很少有这种情况”。正说着,远远的的看到...
    兔高兴Lady阅读 209评论 0 0