在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
如何深入理解JSX和React组件?JSX其实是JavaScript对象,所以使用 React和JSX的时候一定要经过编译的过程。React核心机制虚拟DOM,可在内存中创建的虚拟DOM元素。React利用虚拟DOM减少对实际DOM的操作提升性能,虚拟DOM也可以通过JavaScript来创建。

Reactjs 起源于Facebook内部项目,是一个用来构建用户界面的 javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组件内部通过state来维护组件状态的变化,当组件的状态发生变化时,React通过虚拟DOM技术来增量并且高效的更新真实DOM。
1)、JSX的优势和局限
1、把相关的code放到一起,好维护,这样就是一个单独的组件所必须的。
2、render函数是一个纯函数,没有做渲染的事情,它只不过就是返回了一些指令,然后通过这些指令由React通过DOM或者虚拟DOM来进行操作,所以react返回的结果都是通过 React.createElement产生的结果
3、jsx中的{}中只能是一个表达式,不能是一个语句,因为jsx可以通过babel转换成React.createElement的形式进行渲染,但是React.createElement中的参数只能是一个表达式,不能是一个语句(比如for循环、if判断等),同时jsx中的render函数的{}中不能使用push()、reverse()等数组方法,因为render应该是一个纯函数,纯函数不应该有副作用,渲染的应该是state或者props,如果使用了push()、reverse()等数组方法,那么就会直接修改state或者props里面的数据,而并不是产生新的数据
2)、什么使用props什么时候使用state?
在react中data包括:satae和props,props是从外部的组件中传过来的数据,而satae是组件内部状态,一个组件的自己的satae可以作为传递给它子组件的props的数据来源,一个组件想要改变自己的状态只能通过setState来进行改变自己的状态,一个组件不能够直接通过修改自己的props来改变自己的更新状态,也不能修改自己的porps,因为修改自己的props会很乱的。但凡props能够搞定的事情,尽量不要使用state。
将父级所传递的props,作为子级的state,是会产生值引用对象影响问题,也就是我更改子级state,父级props被相应更改
3)、React组件的生命周期
React组件的生命周期三种过程:
mount:从无到有的过程
update: 重新渲染,又分为state change引发的,和props引发的
unmount:从有到无
mount过程: getDefaultProps getInitialState componentWillMount render componentDidMount:这个函数只能在浏览器端执行,但是使用react做服务器端渲染的时候,不能在服务器端执行(因为在服务器端突出出来的是一个字符串,根本上就没有一个DOM-tree被mount的说法,所以不会执行),
因state改变引发的update过程:
shouldComponentUpdate componentWillUpdate render componentDidUpdate
因父组件想要render这个组件改变引发的update过程:
componentWillReceiveProps shouldComponentUpdate componentWillUpdate render componentDidUpdate
如果当父组件不需要重新渲染,shouldComponentUpdate 会 返回一个false,那样后面的componentWillUpdate、render、componentDidUpdate 就不会执行。
无论是mount过程还是update过程中的render函数之前的声明周期,获取的到的state或者是props都是之前未改变的数据,只有render函数之后,才是数据改变之后的状态,
4)、为什么尽量构建无状态组件
无状态组件就是一个纯函数,尽量让组件成为一个纯函数形式的无状态组件,因为可以减少一些bug出现,我们应该把一些有状态组件(就是里面含有state)集中起来进行管理,让其子组件是一个无状态组件,这样好管理,好维护,
5)、创建高阶组件(HoC,Higher-Order Component)
HoC 高阶组件使用场景把一个通用的功能,使用高阶组件进行共用,这样就不必写同样的功能代码了。
6)、组件之间通讯
父组件通过属性的形式向子组件传递参数,子组件通过props接受父组件传递过来的参数;
子组件如果想和父组件通信,子组件要调用父组件传递过来的方法;
兄弟组件之间的通讯可以借助于父组件作为中介,进行传递数据(父组件中写两个函数,这两个函数分别传给两个子组件,然后互相之间进行相互引用,)
任意组件之间的通讯可以通过设置一个全局变量来作为中介,进行传递数据。
如果这个项目比较打的话,当然也可以使用redux进行组件之间的通讯。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
微信小程序前端怎么做?新手开发入门教程
在大家的实际生活中,微信小程序随处可见。想必大家都多多少少学习过微信小程序,或者尝试开发微信小程序,那么微信小程序前端怎么做呢?本文是一个新手开发入门教程,希望给前端的小伙伴开发小程序,提供一点帮助。
10684
2019-09-05 17:48:42
前端开发CSS清除浮动的方法有哪些?
在前端开发过程中,非IE浏览器下,当容器的高度自动,并且容器内容中有浮动元素(float为left或right),此时如果容器的高度不能自适应内容的高度,从而使得内容溢出破坏整体布局,这种现象叫做浮动溢出,为了方式这个现象的发生,就需要对CSS样式进行处理,而这个过程就叫做CSS清除浮动。现在常用的CSS清除浮动的方法有哪些呢?
7166
2019-10-30 18:55:42
零基础如何学好前端?有什么建议?
前端作为互联网时代直接触达用户的窗口,大到我们每天浏览到的网站,小到一次点击按钮的页面,前端无处不在。并且在产品的众多开发环节之中,最能让用户直观感受到的就是前端开发。因而前端行业的广阔发展前景也吸引了不少人的转业学习。那么,零基础如何学好前端呢?有什么建议吗?本文将为初学者详细解答一下这两个问题,下面一起来看看吧!
5338
2020-03-20 19:05:49
零基础开始学前端有什么建议?
如今,随着物联网时代的到来和网络营销的日益发展,前端技术比以往更加火热。我们可以看到Web应用与新技术趋势紧密相连,而这直接导致了前端行业广阔的就业前景。正因如此,学习前端的朋友越来越多了。为了帮助大家可以更高效地学习,本文为大家总结了一些零基础开始学前端的建议,希望大家可以少走一些不必要的弯路。
5290
2020-06-23 18:41:14
Web前端开发需要学什么?
Web前端开发需要学什么?零基础入门前端需要掌握前端开发基础、移动Web网页开发、JavaScript网页编程、前后端交互等知识,掌握React前端框架,把全栈工程师必须要掌握的全部前端技术、Node.js相关后台技术、HTML5移动开发的相关技术。
5187
2020-07-07 11:39:39
热门文章
- 前端是什么
- 前端开发的工作职责
- 前端开发需要会什么?先掌握这三大核心关键技术
- 前端开发的工作方向有哪些?
- 简历加分-4步写出HR想要的简历
- 程序员如何突击面试?两大招带你拿下面试官
- 程序员面试技巧
- 架构师的厉害之处竟然是这……
- 架构师书籍推荐
- 懂了这些,才能成为架构师 查看更多
扫描二维码,了解更多信息
