# React 基础

React 基础

状态组件和无状态组件

状态组件和无状态组件的差异是一个拥有state,另外一个没有。

对于无状态组件,因为他没有自己的state也就不能够检测state的变化。只是作为上层组件的一部分,在上层组件状态更改的时候重新渲染。

同时,对于无状态组件的写法可以更加的简洁,就只是一个纯函数而已,接收props参数。

虚拟DOM

React自己维持一个虚拟的dom,每次在更新视图的时候(setState),react就会检测屏幕上的DOM与自己维护的虚拟DOM之间的差异。

渲染列表问题

我们在使用数组渲染一个列表的时候大概会遇到这么一个报错,Each child in a list should have a unique "key" prop.

报这个错误的原因就是因为虚拟DOM,因为如果在重新渲染列表比较差异的时候,虚拟DOM不知道,各个子项之间如何区分,所以就需要我们手动提供一个唯一的key

视图的异步更新问题

总所周知,JavaScript是单线程的。那么在假如一个组件的状态正在更新,他正在屏幕上面渲染,那么此时有一个更加重要的任务,react应该如何处理呢?

假如是等待原来那个视图渲染完成才开始执行那个更重要的人物的话,在用户看来界面就是变卡了,就是不好的体验。

所以react的处理方式就是在更新状态的时候每个一段时间就会出来看看,寻找有没有什么更加重要的事情需要处理,如果有的话,就先停下手中的工作,去处理那个更加重要的工作。

props和state

一个组件的state是私有的,可以改变的。但是props来自上层的传递。react遵守的规则是像一个纯函数一样绝不更改上层传递而来的props。

一般来讲上层组件集中管理(管理而不是存储)下层组件的state。

当一个组件发现它的state被更改以后,就会将自己重新进行渲染。要注意的是一个组件的state是不能够直接更改的,而应该通过setState方法更新。state只能在构造函数中进行初始化。

当执行setState是ReactDOM会检测提供的状态和屏幕显示元素state的差异,并且只更新这个差异,而不是更新屏幕显示元素的本身。简单来说就是react并不主动检测更新,而是通过setState告知其需要更新,同时React通过进行虚拟DOM与浏览器DOM的比较,更新最小的差异。

对于自定义的组件,当调用时,会将其属性作为props传递。

props就像是电流一样,在react组件中进行传递,而一个一个的react元素就像是电器一样,根据电流改变他们的('states')状态。

生命周期

每一个react组件都有自己的生命周期,从他们被创建出来,显示在屏幕上,一直到他们从屏幕上消失。

但是这只是这些组件在屏幕上的生命周期,如果不进行处理就还会留下一些副作用。

通过componentDidMount(挂载之后)和componentWillUnmount(卸载之前)等函数可以实现在特定的时间节点完成指定的操作,可以出来在挂载react元素之后执行指定操作或者在卸载react元素之前处理某些副作用。

JSX

React元素

React元素实际上就是一个js对象,最后通过React的render方法才将其转换成为DOM元素显示在浏览器上。

jsx的语法实际上也就是用像是html标签的方式创建这个React元素,而不用使用React.createElement创建,最大的好处就是语法简单,结构清晰。

JSX中的花括号

实际上也就是通过花括号表示这个一个js表达式,这个js表达式可以返回任何值。

React.Fragment

由于jsx的语法本质上还是js,所以每次每次返回的时候只能返回一个React元素,所以有时候需要返回多个元素的时候我们就会使用div将其包裹起来。

如果不想要使用这个无意义的div标签的话,那么我们可以将要返回的多个React元素放在React.Fragment组件中。

转载于:https://www.cnblogs.com/freesfu/p/11516547.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值