2021-11-09

React

1.React概述

特点:

  • 轻量:源码包含注释仅3000多行

  • 原生:代码用原生js写的,不依赖其他库

  • 易扩展:封装程度低,没有过多使用魔法

  • 不依赖宿主环境

  • 渐进式:react并非框架,对工程没有强大约束力

  • 单向数据流:所有的数据自顶而下的流动

  • 组件化

  • 用js代码申明界面

2.JSX核心

  • jsx是js的扩展语法

  • 本质是一个js对象,会被babel编译,最终会被转换为React.createElement

  • 每个jsx有且仅有一个根节点

  • React.Fragment

  • 每个jsx元素必须结束

在jsx中嵌入表达式
  • 在jsx中使用注释

  • 将表达式作为内容的一部分

    • null,undefined,false不会显示
    • 普通对象,不可以作为子元素
    • 可以放置React元素对象
  • 将表达式作为元素的属性

  • 属性使用小驼峰命名法

  • 防止注入攻击

    • 自动编码
    • dangerouslySetInnerHTML
元素的不可变性
  • 虽然jsx元素是一个对象,但对象的元素的所有属性不可以更改
  • 如果确实需要修改属性,重新创建jsx对象
组件和组件属性

包含内容样式行为的UI单元

组件名称首字母必须大写

创建一个组件

  • 函数组件

    • 返回一个React元素
  • 类组件

    • 必须继承React.Component
    • 必须提供render函数用于渲染

组件的属性

1.对于函数组件,属性作为一个对象的属性,传递给函数的参数

2.对于类组件,属性作为一个对象的属性,传递给构造函数的参数

组件的属性使用小驼峰

数据属于谁,谁才有权力改动

数据自顶而下流动

组件状态

组件状态:组件可以自行维护的数据

组件状态仅在类组件有效

状态(state),本质上是一个属性,对象

状态初始化

状态的变化

不能直接改变状态:因为React无法监控到状态发生了变化

必须使用this.setState({})改变状态

一旦调用了this.setState,会导致当前组件重新刷新

组件中的数据

1.props:该数据是由组件的使用者传递数据,所有权不属于组件自身,因此组件无法改变数组

2.state:该数据是组件自身创建,所有权属于组件自身,因此组件有权改变数据

事件

在React中,组件的事件,本质上是一个属性

小驼峰命名

如果没有特殊处理,在事件处理函数中this指向undefined

深入认识setState

setState,它对状态的改变,可能是异步的

  • 如果改变状态的代码处于某个HTML元素的事件中,则其是异步的,否则是同步的。
  • 如果遇到某个事件中,需要同步调用多次,需要使用函数的方式得到最新的状态
  • 最佳实践
    • 把所有的setState当作是异步的
    • 永远不要信任setState调用之后的状态
    • 如果要使用改变之后的状态,需要使用回调函数
    • 如果新的状态要根据之前的状态进行运算,使用函数的方式改变

React会对异步的setState进行优化,将多次setState结果进行改变

生命周期

生命周期:组件从诞生到销毁会经历一系列的过程,这个过程称之为生命周期。React在组件的生命周期中提供了一系列的勾子函数,可以让开发者在函数中注入代码,让这些代码在适当时候运行。

生命周期仅仅存在于类组件,函数组件每次调用都是重新运行函数,旧的组件即刻被销毁

旧版生命周期

React<16.0.0

1.constructor

​ 1.同一个组件对象只会创建一次

​ 2.不能在第一次挂载到页面之前,调用setState,因此构造函数中严禁使用setState

2.componentWillMount

​ 1.正常情况下,和构造函数一样,它只会运行一次

​ 2.可以使用setState,但是为了避免BUG,不允许使用,因为在某些特殊情况下,该函数可能被调用多次

3.render

​ 1.返回一个虚拟DOM,会被挂载到虚拟DOM树,最终渲染到页面的真实DOM中

​ 2.render可能不只运行一次,只需要重新渲染,就会重新运行

​ 3.严禁使用setState,可能会导致无限递归渲染

4.componentDidMount

​ 1.只会执行一次

​ 2.可以使用setState

​ 3.通常情况下,会将网络请求,启动计时器等一开始需要的操作,书写到该函数中

5.组件进入活跃状态

6.componentWillReceiveProps

​ 1.即将接受新的属性值

​ 2.参数为新的对象属性值

​ 3.该函数可能会导致一些BUG,不推荐使用

7.shouldComponentUpdate

​ 1.指示React是否要重新渲染该组件,通过返回true和false来指定

​ 2.默认情况下直接返回true

8.componentWillUpdate

​ 1.组件即将被重新渲染

9.componentDidUpdate

​ 1.往往在该函数中使用Dom操作,改变元素

10.componentWillUnmount

​ 1.通常在该函数中销毁一些组件依赖[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sCui2xY7-1636425878315)(C:\Users\94760\Desktop\笔记\React.assets\IMG_20211105_155758.jpg)]的资源,比如计数器

新版生命周期

React>16.0.0

1.getDerivedStateFromProps

​ 1.通过参数获取新的属性和状态

​ 2.该函数是静态的

​ 3.该函数的返回值会覆盖掉组件状态

​ 4.该函数没什么用

2.getSnapshotBeforeUpdate

​ 1.真实的DOM构建完成,但未实际渲染到页面中

​ 2.在该函数中,通常用于实现一些附加的DOM操作

​ 3.该函数的返回值,会作为componentDidUpdate的第三个参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6PbFjGte-1636425878317)(C:\Users\94760\Desktop\笔记\React.assets\IMG_20211105_155724.jpg)]

表单

受控组件和非受控组件

受控组件:组件的使用者,有能力完全控制该组件的行为和内容 。通常情况下,受控组件往往没有自身状态,其内容完全受到属性的控制。

非受控组件:组件的使用者,没有能力控制该组件的行为和内容,组件的行为和内容完全自行控制。

表单组件默认情况下是非受控组件,一旦设置表单组件的value属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lucky神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值