react hooks 使用小技巧—useState传值函数

简介: 当使用useState时,传入一个函数作为初始状态值的参数和传入一个值的参数的效果是一样的,都会在组件渲染时被调用,但它们的使用场景略有不同。

前言


当使用 setState 更新组件状态时,可以选择传递一个新的值或者传递一个函数。


无论是传递新值还是传递函数,setState都会触发组件重新渲染。重新渲染会更新组件的显示。

  1. 传递一个新值:直接将新值赋给状态。适用于简单的状态更新,不需要基于之前的状态进行计算。
  2. 传递一个函数:将之前的状态作为参数传递给函数,该函数进行计算并返回一个新的状态值。适用于需要基于之前的状态进行复杂计算或逻辑操作的情况。

示例代码

1、传入一个值,在add函数内,执行三次setNum后,预期num应是 3,但是执行后仍然是1,

let [num, setNum] = useState(0)
const add()=>{
  setNum(num + 1);
  setNum(num + 1);
  setNum(num + 1);
  console.log(num) // 3
}

num状态在当前函数组件生命周期内,永远是0,无论调用多少次 setState 设置新值也没有。

因为react 内部 执行批量更新的优化策略,可以简单理解为,num变量在函数内重新声明。

let [num, setNum] = useState(0)
const add()=>{
  let = num = 0
  setNum(num + 1);
  setNum(num + 1);
  setNum(num + 1);
  console.log(num) // 1
}

对同一次渲染来说 num 是一个固定的值。在多次执行setState情况下React 会并并批量处理,以提高性能。也就是说,不会立即进行多次重新渲染,而是在所有更新应用后进行一次重新渲染。

2、传入一个函数,setNum中使用函数作为参数

let [num, setNum] = useState(0)
const add()=>{
    setNum((num)=>num + 1);
    setNum((num)=>num + 1);
    setNum((num)=>num + 1); 
  console.log(num) // 3
}


总结

通过传递函数的方式,可以获得最新的之前状态,并避免并发更新导致的问题。这种方式允许确保在处理并发更新时的正确性。

相关文章
|
2月前
|
前端开发 JavaScript API
探究 React Hooks:如何利用全新 API 优化组件逻辑复用与状态管理
本文深入探讨React Hooks的使用方法,通过全新API优化组件逻辑复用和状态管理,提升开发效率和代码可维护性。
|
2月前
|
前端开发
深入探索React Hooks:从useState到useEffect
深入探索React Hooks:从useState到useEffect
27 3
|
2月前
|
前端开发 JavaScript
深入探索React Hooks:从useState到useEffect
深入探索React Hooks:从useState到useEffect
|
2月前
|
前端开发 JavaScript
React Hooks 深入解析
React Hooks 深入解析
34 0
|
2月前
|
前端开发
React Hooks:从基础到进阶的深入理解
React Hooks:从基础到进阶的深入理解
35 0
|
2月前
|
缓存 前端开发 开发者
深入理解React Hooks,打造高效响应式UI
深入理解React Hooks,打造高效响应式UI
38 0
|
2月前
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
91 9
|
3月前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
2月前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
180 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
2月前
|
前端开发 JavaScript 开发者
使用React和Redux构建高效的前端应用
使用React和Redux构建高效的前端应用
48 1