码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 128.《usestate与usestate区别及应用场景》


    文章目录

      • 1.usestate
        • 基本使用
        • usestate 问题展示
      • 2. useRef 基本使用
        • 使用场景1(存储 dom 元素)
        • 使用场景2(可获取useState更新后的最新值)
      • 3.useState 与 useRef 区别
        • 1. useState的值在每个rernder中都是独立存在的。而useRef.current则更像是相对于render函数的一个全局变量,每次他会保持render的最新状态。(useState异步更新其值,useRef同步更新。)
        • 2. useState触发重新渲染,useRef不触发
        • 3. useRef()钩不仅用于DOM引用。“ ref”对象是通用[容器](https://cloud.tencent.com/product/tke?from=10680),其当前属性是可变的,并且可以保存任何值,类似于类的实例属性。
        • 4. 变量是决定视图图层渲染的变量,请使用`useState`,其他用途`useRef`
        • 5. useRef特性:可变的ref对象,持久化
      • 4.最近上班心得

    在 ·react16.8· 以后,我们的函数组件的用户日益增长,这归咎于我们的hooks,是的react变成简单化,但同时也会遇到一些问题,

    这篇博客主要是 useState 与 useRef的区别,以及实际使用场景,博客代码仅会涉及功能组件,需要的朋友麻烦点点赞

    1.usestate

    基本使用

    Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

    再类组件我们通过 state = {} 或者子啊构造函数 [constructor](javascript:😉 中 的 this.state = {} 姐存储变量,在类组件中使用 react 内置的usestate 来存储状态

    usetstae 示例

    import React, { useState } from 'react';
    
    function Example() {
      // 声明一个叫 "count" 的 state 变量
      const [count, setCount] = useState(0);
     
      return (
        

    You clicked {count} times

    ); }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    输出结果

    如图我们的 count 可以存在 usestate中,hooks 中的 usestate相当于类组件中的 state 存储状态, 但是 usestate 有个问题,setCount 后不能立马得到更行后的最新值,下面让我们展示下问题吧

    usestate 问题展示

     
    import React, { useRef, useState } from 'react' 
    import './less.css'
    export default  ()=>{
      // 声明一个叫 "count" 的 state 变量
      const [count, setCount] = useState(0); 
    
      return (
        

    You clicked {count} times

    ); }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    输出结果

    由输出结果可以看出,每次输出都是上次的旧值,得不到最新的值,在类组件是通过 setstate 第二个参数回调函数得到更新后的最新值,子啊函数组件中一般使用 useEffect 的第二个参数来监听我们需要变化的值,来获取变化后的最新值,但这并不适用于所有情况,例如:你在 jsx 中的某个 { } 打括号中写逻辑呢,显然 useEffect 是不能写在 jsx 中的,所以为了得到更新后的最新值 推荐使用 useRef (下面示例)

    2. useRef 基本使用

    作用1: 标识 dom 元素,可获取被标识元素的属性

    作用2:存储变量,被包裹的变量不经过 render 函数,类似于全局变量,所以一旦 render 函数内部对状态进习修改,useRef 可得到最新的值

    使用场景1(存储 dom 元素)

    引入 useRef ,通过 ref 标识元素,被 ref 标识的元素会当作 useRef 的返回值,并且通过 useref.current 获取值,示例如下

     
    import React, { useRef } from 'react' 
    export default () => {
        let inputEl= useRef()
         const handleFocus = ()=>{
            console.log(inputEl);
         }
        return (
            

    ) };
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    输出结果

    通过 useRef 获取到了 被 ref 标记的 DOM 元素,Dom 元素获取到了,就可以获取到 DOM 元素身上的其他属性,比如 input 的 value

    inputEl.current.value  // 可以的打斗文本框的 value 值
    
    • 1

    使用场景2(可获取useState更新后的最新值)

    代码示例

     
    import React, { useRef,useState } from 'react'  
    export default () => { 
        let inputEl = useRef(0)
         const handleFocus = ()=>{
            inputEl.current++
            console.log('更新后的值', inputEl.current); 
         }
        return (
            

    {a}

    ) };
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3.useState 与 useRef 区别

    1. useState的值在每个rernder中都是独立存在的。而useRef.current则更像是相对于render函数的一个全局变量,每次他会保持render的最新状态。(useState异步更新其值,useRef同步更新。)

    2. useState触发重新渲染,useRef不触发

    3. useRef()钩不仅用于DOM引用。“ ref”对象是通用容器,其当前属性是可变的,并且可以保存任何值,类似于类的实例属性。

    4. 变量是决定视图图层渲染的变量,请使用useState,其他用途useRef

    5. useRef特性:可变的ref对象,持久化

    4.最近上班心得

    上班真的好开心,需求bug来不停。

    产品测试来回找,后端交互想上刑。

    会议不停满楼跑,文档笔记要分清。

    摸鱼睡觉一时爽,提测发布胆惊心。

    大佬思绪跟得上,想法创意实践灵。

    日常积累很重要,自我提高才算行。

    暮然回首学生时,半载已过还未明。

    处处少年何模样?如今胡须满颔停!

  • 相关阅读:
    JVM(十二) —— 对象的实例化
    来!PyFlink 作业的多种部署模式
    ssm南工二手书交易平台毕业设计源码172334
    深入理解Docker自定义网络:构建高效的容器网络环境
    哪种烧录单片机的方法合适?
    【Nginx】实战应用(服务器端集群搭建、下载站点、用户认证模块)
    C语言中各种运算符用法
    传统制造业如何进行数据分析?_光点科技
    Ai-WB2系列模组linux开发环境搭建
    rabbitMQ(3)
  • 原文地址:https://blog.csdn.net/qq_44864082/article/details/126335832
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号