首页 > 其他分享 >react中useState、useRef、变量之间的区别

react中useState、useRef、变量之间的区别

时间:2024-06-22 21:11:00浏览次数:13  
标签:状态 useRef current 视图 react useState 组件

数组件有函数作用域,每次render时,声明的方法会生成新的引用,声明的普通变量会重新声明并赋值初始值,而useRef和useState会保留状态。

1.useState 组件更新不会改变之前的状态,可以保存状态。值变化,会render,视图会更新,setState是异步的,同一个函数内设置的,不能实时获取到最新的值。 使用场景: 当我们需要在状态改变的时候重新渲染视图,那么我们就使用 useState 来保存我们的状态

2.useRef保存的值 组件更新不会改变之前的状态,可以保存状态。值变化,不会render,视图不会更新。设置的值是同步的,同一个函数内设置的,能实时获取到最新的值。 使用场景: 如果我们只是想保存状态不影响视图更新,而且可以同步更新&获取我们的状态,那么就使用 useRef。 注意事项:ref.current 不可以作为其他 hooks(useMemo, useCallback, useEffect)依赖项;。 ref.current 的值发生变更并不会造成render, Reactjs 并不会跟踪 ref.current 的变化。

3.变量(组件内) 变量在每次组件重新渲染的时候都会被重新进行赋值为初始值,所以如果你想要保留之前操作的状态的话就不要使用变量。  
import styles from './index.less';
import { Button } from 'antd';
import { useRef, useState } from 'react';
const HomePage = () => {
  const [state, setState] = useState(0)
  const num = useRef(0)

  const fn1 = () => {
    setState(state => ++state)
    console.log(state) //输出更新前的值
  }

  const fn2 = () => {
    num.current += 1
    console.log(num.current) //输出1
  }

  console.log('渲染组件渲染组件渲染组件渲染组件渲染组件渲染组件')
  return <div>
    <h2>react中useState、useRef、变量之间的区别</h2>
    <h3>函数组件有函数作用域,每次render时,声明的方法会生成新的引用,声明的普通变量会重新声明并赋值初始值,而useRef和useState会保留状态。</h3>
    <div>1.useState 组件更新不会改变之前的状态,可以保存状态。值变化,会render,视图会更新,setState是异步的,同一个函数内设置的,不能实时获取到最新的值。</div>
    <Button onClick={fn1} type="primary" size="small">useState</Button>
    <div>使用场景: 当我们需要在状态改变的时候重新渲染视图,那么我们就使用 useState 来保存我们的状态</div>
    <div>2.useRef保存的值 组件更新不会改变之前的状态,可以保存状态。值变化,不会render,视图不会更新。设置的值是同步的,同一个函数内设置的,能实时获取到最新的值。</div>
    <Button onClick={fn2} type="primary" size="small">useRef</Button>
    <div>使用场景: 如果我们只是想保存状态不影响视图更新,而且可以同步更新&获取我们的状态,那么就使用 useRef。</div>
    <div>注意事项:ref.current 不可以作为其他 hooks(useMemo, useCallback, useEffect)依赖项;。</div>
    <div> ref.current 的值发生变更并不会造成render, Reactjs 并不会跟踪 ref.current 的变化。</div>
    <div>3.变量(组件内)
      变量在每次组件重新渲染的时候都会被重新进行赋值为初始值,所以如果你想要保留之前操作的状态的话就不要使用变量。
    </div>
  </div>
    ;
};



export default HomePage;

 

标签:状态,useRef,current,视图,react,useState,组件
From: https://www.cnblogs.com/ssszjh/p/18262710

相关文章

  • React脚手架的搭建方法及配置
    react脚手架:npmcreatereact-app项目名称搭建路由:下载包:npmireact-router-dom在router文件夹下新建routerConfig.ts文件,文件中配置路由:import{HashRouter,Routes,Route,Navigate}from'react-router-dom'import{lazy}from'react'letarr=[  {  ......
  • React的服务器端渲染(SSR)和客户端渲染(CSR)有什么区别?
    React的服务器端渲染(SSR)和客户端渲染(CSR)是两种不同的页面渲染方式,它们各自有不同的特点和适用场景:服务器端渲染(SSR)页面渲染:页面在服务器上生成,然后将完整的HTML发送给客户端。SEO:由于搜索引擎爬虫可以直接访问到完整的页面内容,因此对搜索引擎优化(SEO)更为友好。首......
  • 描述React Hooks中的useMemo和useCallback的区别和用途。
    ReactHooksAPI中的useMemo和useCallback都是用于优化性能的钩子,但它们的用途和工作方式略有不同:推荐大家看看我过往的文章useMemouseMemo是一个性能优化钩子,它返回一个记忆化的值。useMemo可以避免在组件渲染时进行昂贵的计算或操作,通过记忆化的方式缓存计算结果,仅当依......
  • 2024-06-21 如何在React中使用ECharts
    要安装两个插件echarts和echarts-for-react,前者是一个js图标库,后者是对前者在react的封装,想要在react用echarts,就得装echarts-for-react这类的转换库。yarnaddechartsecharts-for-react例子:importReact,{Component}from"react";importReactEChartsfrom"echarts......
  • 【React篇】父组件渲染时避免重复渲染子组件的3种处理方法
    在React中,父组件渲染时要避免重复渲染子组件,可以使用以下方法:使用React.memo(仅适用于函数式组件)或PureComponent(适用于类组件):这些方法可以帮助你创建在接收到新的props时仅在有必要的情况下重新渲染的组件。它们通过浅比较新旧props来判断是否需要重新渲染。对于......
  • 对于react的 <outlet />的理解
    先贴代码layouts文件夹里面有一个文件index.tsx1import{Link,Outlet}from'umi';2importstylesfrom'./index.less';34exportdefaultfunctionLayout(){5return(6<divclassName={styles.navs}>7<ul>8......
  • React+TS前台项目实战(十四)-- 响应式头部导航+切换语言相关组件封装
    文章目录前言Header头部相关组件1.功能分析2.相关组件代码+详细注释3.使用方式4.Gif图效果展示总结前言在这篇博客中,我们将封装一个头部组件,根据不同设备类型来显示不同的导航菜单,会继续使用Reacthooks和styled-components库来构建这个组件,此外,也会实现切换......
  • 深度分析:React Native、Flutter、UniApp、Taro、Vue的差异
    深度分析:ReactNative、Flutter、UniApp、Taro、VueReactNative优势:跨平台代码共享:使用JavaScript和React,可以为iOS和Android开发应用,代码复用率高。活跃社区和生态系统:React和ReactNative有庞大的社区,提供了大量的第三方库和插件。热重载:开发效率高,修改代码后几乎......
  • React项目中使用轻量富文本编辑器
    React项目中使用轻量富文本编辑器安装npminstallreact-quill创建编辑器组件//src/MyQuillEditor.jsimportReact,{useState}from'react';importReactQuillfrom'react-quill';import'react-quill/dist/quill.snow.css';//引入样式constMyQuillEdi......
  • 为什么说 React 更新拖慢整个互联网
    React是由Facebook开发并开源的JavaScript库,用于构建用户界面。自2013年发布以来,React已成为前端开发的主流工具之一。然而,尽管React带来了许多开发效率和用户体验的提升,近年来也有声音指出,React的更新可能在某种程度上拖慢了整个互联网。本文将探讨这一观点的背景、原......