• React之Hooks基础


    目录

    1、Hooks解决了什么问题

    2、useState

    2.1 状态的读取和修改

    2.2 组件的更新过程

    2.3 使用规则

    3、useEffect

    3.1 基础使用


    Hooks一套能够使函数组件更强大,更灵活的“钩子”。

    React体系里组件分为类组件和函数组件。

    经过很多年的应用,我们发现函数组件其实是更加简单的,而且是更加契合我们React的设计理念 UI = f(data),也更有利于逻辑拆分与重用的组件表达形式,但是我们也知道,函数组件它是不能维护我们自己的状态的,那就很难受了,这该怎么办,所以为了能让函数组件可以拥有自己的状态,所以从react v16.8开始,Hooks应运而生。

    注意:

    1. 我们要知道,hooks的出现并不是要干掉我们的class类组件,class类组件并没有被移除,俩者都可以使用。
    2. 有了hooks之后,我们就要改变以前的说法,我们不能再说函数是一个无状态的组件了,因为hooks为函数组件提供了状态。
    3. hooks只能在函数组件中使用。

    1、Hooks解决了什么问题

    Hooks的出现解决了俩个问题

    1. 组件的状态逻辑复用

    组件的逻辑复用在hooks出现之前,react先后尝试了 mixins混入,HOC高阶组件,render-props等模式但是都有各自的问题,比如mixin的数据来源不清晰,高阶组件的嵌套问题等等

    2.class组件自身的问题。

    class组件自身的问题class组件就像一个厚重的‘战舰’ 一样,大而全,提供了很多东西,有不可忽视的学习成本,比如各种生命周期,this指向问题等等,而我们更多时候需要的是一个轻快灵活的'快艇'

    2、useState

    useState为函数组件提供状态(state)。

    接下来我们看看如何useState给我们的函数式组件提供状态。

    然后大家就可以打开浏览器去体验一下这个修改操作了。

    2.1 状态的读取和修改

    读取状态:

    1. userState方法 传过来的参数,作为count 的初始值,该方法提供的状态,是函数内部的局部变量,可以在函数内的任意位置使用。
    2. [count, setCount],这里的写法是一个解构赋值,userState返回值是一个数据,里面的面子可以自定义,但是顺序不可以替换。

    修改状态:

    1. setCount函数 作用用来修改count 依旧保持不能直接修改原值,还是生成一个新值替换原值。
    2. count 和 setCount 是一对,是绑在一起的 setCount 只能用来修改对应的count值。

    2.2 组件的更新过程

    函数组件使用 useState hook 后的执行过程,以及状态值的变化 。

    1. 首次渲染
      1. 首次被渲染的时候,组件内部的代码会被执行一次。
      2. 其中useState也不会跟着执行,不过,初始值只在首次渲染时生效。
    1. 更新渲染
      1. 函数组件会再次渲染,这个函数会再次执行。
      2. userState再次执行,得到新的count值,不是原来的初始值,而是修改之后的值,模板会用新值再次渲染。

    注意:

    useState 的初始值(参数)只会在组件第一次渲染时生效。也就是说,以后的每次渲染,useState 获取到都是最新的状态值,React 组件会记住每次最新的状态值

    2.3 使用规则

    1、useState 函数可以执行多次,每次执行互相独立,每调用一次为函数组件提供一个状态。

    2、useState 注意事项

    1. 只能出现在函数组件中
    2. 不能嵌套在if/for/其它函数中(react按照hooks的调用顺序识别每一个hook)

    3、useEffect

    副作用是相对于主作用来说的,一个函数除了主作用,其他的作用就是副作用。对于 React 组件来说,主作用就是根据数据(state/props)渲染 UI,除此之外都是副作用(比如,手动修改 DOM)。

    常见的副作用

    1. 数据请求 ajax发送
    2. 手动修改dom
    3. localstorage操作

    useEffect函数的作用就是为react函数组件提供副作用处理的!

    3.1 基础使用

    我们做一个小案例,我想在我们修改数据之后,把count 最新值放到页面标题中去,那它其实已经脱离我们的这个函数了,它其实做了一个dom 操作。那它就显然是副作用啦。

    看看浏览器。

  • 相关阅读:
    uni-app 小程序:显示图片并且点击图片展示大图
    (const char *format, ...) 可变参数在文本日志中的巧妙使用
    Mybatis源码解析(六):一级缓存和二级缓存的优先级
    qrcodejs2 生成二维码 并上传oss
    面渣逆袭:JVM经典五十问,这下面试稳了
    操作系统实验五 进程间通信-管道通信
    Python学习----数据容器
    Linux 系统执行ls 命令出现 Input/output error 解决妙招
    AndroidStudio jni C++与Java互相调用
    2023应届毕业生前端面试总结
  • 原文地址:https://blog.csdn.net/weixin_53041251/article/details/126543488