React学习笔记(二)

useTransition 过渡函数

用来管理UI中的过渡状态,特别是在处理长时间运行的状态更新时,可以将这些长时间运行的标记为过渡状态(这些状态只是过渡状态),React会先去处理更重要的更新,延时处理过渡更新。

将一些事件标记为过渡状态。

本质上是将事件或函数的优先级降低,让react优先去处理更高优先级的事件。

const [isPending,stratTrasition] = useTransition();//不需要任何参数

useDeferredValue

也是用于设置延迟处理,但他是设置某个变量进行延迟,类似防抖的功能,只有值(比如输入框的值)不在变化时才会去赋值,但是他不能设置延迟时间,具体的时间决定于设备的性能。

与useTransition也是有区别的,useTransition设置函数延后,比如输入框的值他只会保留最后一次的键入的值。

useEffect

副作用函数

useEffect(function,dependencies?)

执行时机

  1. 组件挂载后执行function
  2. 依赖项dependencies发生变化后执行,dependencies是一个数组,当不传入该变量时,只要组件重新渲染即执行,传入空数组则代表没有依赖项,只执行初始化一次。
  3. function中可以加入清理函数,执行需要的清除操作,比如清理settimeout函数等。清理函数在组件卸载时执行(下一次组件更新前也会卸载当前组件,挂载新的组件。)
    window.structclone函数可以实现深拷贝,在较高浏览器版本中可以使用。...展开符是浅拷贝,只能独立复制第一层的副本,如果第一层中是对象,则只能复制其地址。

useLayoutEffect

与useEffect相似,也是副作用。但也有不同点。

useEffect是异步执行,不阻塞DOM渲染,在浏览器布局和绘制之后执行,DOM渲染页面绘制后再刷新,可以添加过渡效果,但也会可能造成闪烁问题。

useLayoutEffect是同步执行,阻塞DOM渲染,在页面完成布局和绘制前执行,因此在其内部添加过渡效果没用,页面只会呈现最终的效果。但根据他的特性在一些场景可以避免页面闪烁现象。

应用:比如在瀑布流列表中页面跳转再返回后页面刷新执行useLayoutEffect保持原来的浏览位置,增强用户体验。模拟react的生命周期函数。

useRef

更优雅的获取和操作DOM

useRef无法像vue中一样直接获取子组件的实例。

存储旧值

React组件每次重新渲染,普通变量都会被初始化无法存储上一次的值,通过useRef可以保留下来。但他不是一个响应式状态,只是一个普通的JavaScript对象。

应用:设置一个定时器,开启和关闭

useImperativeHandle

用于给父组件暴露自组件的状态、属性和方法,比如在封装表单组件后向外暴露校验方法、清空方法等。

useImperativeHandle(ref,()=>{},deps)

在函数中返回暴露的值,deps是依赖性,用法机制和useEffect相同。

ref需要配合useRef使用。在父组件中使用useRef定义一个ref传递给子组件。在React18和React19中用法不一样,旧版中比较复杂,ref需要配合forwardRef来使用,在新版中ref直接可以从子组件的props中解构出来。

useContext

实现祖孙之间的直接通讯

首先使用createContext全局创建一个context,支持传入默认值。

const ThemeContext = React.createContext({} as IThemeContext)

接着直接使用创建的context去包裹要通信的子组件,通过value去传递值,包括变量和方法。在React19中可以省去provider

<ThemeContext.provider value={{theme,setTheme}}>

</>

/ThemeContext.provider>

在内部任何层级的子组件都可以去使用这个context,获得其中传递的值。

const theme = useContext(ThemeContext)

theme.setTheme()

组件外部可以包裹多层context,可以包裹多个相同的context,但是相同的context内层的会覆盖外层的。

React.memo useMemo

只要父组件重新渲染,子组件也会重新渲染,这是React的一个缺陷。使用React.memo可以进行优化,将子组件用React.memo包裹起来,当只有传给子组件的props变化时,才会触发子组件的重新渲染。

useMemo是缓存值,类似于vue中的compute函数。组件重新渲染时,所有的值都会被重新计算,使用useMemo包裹某个计算,当只有依赖项(类似于useEffect)发生变化时才会重新计算,否则就使用上一次的值。

useCallback

缓存函数,减少不必要的销毁和重建。

使用WeakMap来验证函数是否销毁并重新创建。WeakMap是弱引用,当changvalue在重新渲染被销毁后会重新新建立一个崭新的实例(内存地址发生变化),map.has(changeValue)就为false。

使用useCallBack包裹函数防止函数重复创建后,如果该函数作为props传入子组件时,子组件使用React.memo进行包裹,也能防止子组件重新渲染。

useDebugValue

调试自定义hook中的值,与devtools拓展配合使用,可以在devtools中显示该值。

useId

生成唯一的id

在React中label标签的for属性改为了htmlFor

相关推荐
2501_944525545 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 预算详情页面
android·开发语言·前端·javascript·flutter·ecmascript
打小就很皮...5 小时前
《在 React/Vue 项目中引入 Supademo 实现交互式新手指引》
前端·supademo·新手指引
C澒5 小时前
系统初始化成功率下降排查实践
前端·安全·运维开发
摘星编程5 小时前
React Native + OpenHarmony:自定义useFormik表单处理
javascript·react native·react.js
C澒6 小时前
面单打印服务的监控检查事项
前端·后端·安全·运维开发·交通物流
pas1366 小时前
39-mini-vue 实现解析 text 功能
前端·javascript·vue.js
qq_532453536 小时前
使用 GaussianSplats3D 在 Vue 3 中构建交互式 3D 高斯点云查看器
前端·vue.js·3d
Swift社区6 小时前
Flutter 路由系统,对比 RN / Web / iOS 有什么本质不同?
前端·flutter·ios
2601_949833396 小时前
flutter_for_openharmony口腔护理app实战+我的实现
开发语言·javascript·flutter
雾眠气泡水@6 小时前
前端:解决同一张图片由于页面大小不统一导致图片模糊
前端