react篇4--setState、LazyLoad和Hooks

先新建一个项目,准备以下文件:

一、setState

对象式setState()

案例为点击按钮让页面中的数据加1的效果。

其实setState()更新状态是异步的。

准确地说setState()是同步地,但是引起数据状态变化的动作是异步的。

效果如下:

setState()方法除了上面的写法,setState()也可以传两个参数,第一个参数还是数据对象,第二个参数为函数(状态改变函数),第二个参数的函数在状态更新完毕render()执行完后被调用。

函数式setState()

setState()还有一种写法,是函数的setState()。也有两个参数,第一个参数是函数,该函数返回state改变后的状态,第二个参数也是函数,也是状态更新完render()执行完之后被调用。

注意:第一个参数函数可以接收两个值state、props,

总结:若是新状态不依赖原状态,则使用对象式setState(),否则使用函数式setState()更方便(不是必须,只是不用手动获取state)。

二、LazyLoad

懒加载最多的使用场景是路由组件的懒加载。

这样会造成资源的浪费,需要实现点击一个路由组件加载一个的方式,即实现路由组件的懒加载。

三、Hooks

Hooks时react16.8版本增加的新特性,可以在函数组件中使用state以及其他的react特性。

之前说过,函数式组件没有this,不能使用对象实例的特性(除了props)。函数式组件也不能用生命周期函数。Hooks可以解决这些问题。

在之前一、setState的例子的基础上进行修改。

有三个常用的Hook,分别为React.useState()、React.useEffect()、React.useRef()。

useState()

useState()方法返回两个参数,第一个参数是数据,第二个参数是更新数据的方法,方法的参数是返回值第一个参数的初始值。

注意:每一次点击按钮函数组件Demo都会被调用一次,react底层做了处理,只有第一次执行的时候才会执行"const count,setCount = React.useState(0)"进行初始化操作。

改变数据的方法setCount也有两种写法。另一种写法也是传递一个函数,该函数参数为旧值,返回值为修改后的值。

useEffect()

useEffect()使得函数组件中可以使用生命周期函数。

用一个例子说明。

函数式组件中没有componentDidMount()方法。

React.useEffect()方法有两个参数(第二个可选),第一个参数表示执行的操作,第二个参数是一个数组,表示检测的setState的数据。

第二个参数不穿,React.useEffect()指定的第一个参数的方法类似于类组件的生命周期函数componentDidUpdate()。

所以,可以看出,不传第二次参数类似于类组件的,传空数组类似于类组件的componentDidMount()。

之前在类组件还有一个案例,若是组件被卸载了需要把定时器清楚,类组件是在生命周期函数componentWillUnmount()中卸载定时器的。

函数组件中若想实现componentWillUnmount()的效果,需要把React.useEffect()的第一个参数(函数)的返回值为一个函数,这个函数相当于componentWillUnmount()。

可以把useEffect()看成componentDidMount()、DidUpdate()与componentWillUnmount()的结合。

useRef()

在之前的点击按钮弹出用户的输入内容的例子中,类组件中一个组件(button)要获得另一个组件input的value值,需要需用ref属性。

函数式组件中需要使用useRef()。

相关推荐
Amumu12138几秒前
NodeJs介绍
前端·node.js
咧咧小侠2 分钟前
Windows Codex 连接 Chrome 失败:一次 nodeRepl.fetch 报错排查记录
前端·chrome
Eider19984 分钟前
大模型输出格式幻觉解决思路
开发语言·前端·javascript
广州智造4 分钟前
Radioss时间步长(Time Step)
前端·设计·cad·建模·cae·radioss
志尊宝25 分钟前
Vue3 零基础每日笔记(085):项目上线前 Checklist——环境变量、报错监控、安全自查
前端·javascript·笔记·安全·信息可视化·echarts
朱涛的自习室34 分钟前
我让 Gemini 4 当高管、DeepSeek 当员工,开了一家软件公司(Day 1)
android·前端·人工智能
志尊宝37 分钟前
Vue3 零基础每日笔记(088·完结):从零到一——一个完整 Vue3 项目的成长复盘
前端·javascript·vue.js·笔记·ecmascript·#vue.js
deli00741 分钟前
加一台机器,为什么只有 1/N 的 key 要搬家?一致性哈希实测
前端
兔子零102444 分钟前
FastAPI 零基础入门教程:写过 Node.js,就能轻松学会 Python 后端开发(一)
前端·后端·python
传人once1 小时前
企业官网静态页基础结构如何搭
javascript·css