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
}


总结

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

相关文章
|
5月前
|
前端开发
轻松掌握 React Hooks:简化状态与副作用管理
轻松掌握 React Hooks:简化状态与副作用管理
202 80
|
5月前
|
前端开发
React Hooks数据获取:避免内存泄漏的实战指南
React Hooks数据获取:避免内存泄漏的实战指南
|
1月前
|
缓存 前端开发 JavaScript
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
🌟蒋星熠Jaxonic,前端探索者。专注React Hooks深度实践,从原理到实战,分享状态管理、性能优化与自定义Hook精髓。助力开发者掌握函数组件的无限可能,共赴技术星辰大海!
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
|
前端开发 JavaScript
React Hooks 全面解析
【10月更文挑战第11天】React Hooks 是 React 16.8 引入的新特性,允许在函数组件中使用状态和其他 React 特性,简化了状态管理和生命周期管理。本文从基础概念入手,详细介绍了 `useState` 和 `useEffect` 的用法,探讨了常见问题和易错点,并提供了代码示例。通过学习本文,你将更好地理解和使用 Hooks,提升开发效率。
240 4
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
12月前
|
前端开发 JavaScript
深入探索React Hooks:从useState到useEffect
深入探索React Hooks:从useState到useEffect
|
前端开发 开发者
React 提供的其他重要 Hooks
【10月更文挑战第20天】React 提供了一系列强大的 Hooks,除了 `useRef` 之外,还有许多其他重要的 Hooks,它们共同构成了函数式组件开发的基础。
214 62
|
12月前
|
前端开发
React Hooks:从基础到进阶的深入理解
React Hooks:从基础到进阶的深入理解
250 2
|
12月前
|
前端开发 JavaScript API
探究 React Hooks:如何利用全新 API 优化组件逻辑复用与状态管理
本文深入探讨React Hooks的使用方法,通过全新API优化组件逻辑复用和状态管理,提升开发效率和代码可维护性。
|
12月前
|
前端开发
深入探索React Hooks:从useState到useEffect
深入探索React Hooks:从useState到useEffect
139 3