React Hooks之useState、useRef

本文介绍了ReactHooks中的useState和useRef,分别用于在函数组件中管理状态(如计数器示例)和创建可变引用(如EditableProTable中的可编辑行key)。useState用于处理组件内部状态的增删改,useRef则用于存储和操作组件实例,提高灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

React Hooks之useState

React Hooks

在 React 16.8 版本中引入了 Hooks,它是一项新的特性,使得我们在函数组件中可以使用状态(state)和其他 React 特性,而无需编写类组件。

Hook 是一些可以让你在函数组件中“钩入” React 状态及生命周期等特性的函数,它可用于增强函数组件的功能,以解决类组件难以解决的问题。

useState

在 React 中,我们可以使用 useState Hook 来管理函数组件的内部状态。

useState 是一种 Hook,它接收一个初始状态值,并返回一个由当前状态值以及一个更新状态值的函数组成的数组。通常,我们将 useState 的返回值解构为数组的形式,然后使用 ES6 数组解构的方式获取当前状态值和更新状态值的函数。

demo:在函数式组件中使用 useState Hook 管理计数器

以下是一个简单的例子,在函数式组件中使用 useState Hook 管理计数器的状态:

import React, { useState } from 'react'
 
function Counter() {
  const [count, setCount] = useState(0)
 
  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>+1</button>
      <button onClick={() => setCount(count - 1)}>-1</button>
    </div>
  )
}
 
export default Counter
  • 在 Counter 组件中调用 useState Hook,初始化计数器的状态值为 0。
  • count 表示当前状态的值,setCount 表示更新状态的函数。
  • 在 JSX 中,我们可以通过 { count } 的方式引用当前状态值,通过 { () => setCount(count + 1) } 的方式更新状态值。
  • 每次更新状态后,React 都会重新渲染组件使其展示新的页面。

demo:ant-design-pro 中EditableProTable组件使用

上一个例子结构比较简单,

  const [editableKeys, setEditableRowKeys] = useState<React.Key[]>(() => []);

这段代码使用了 React 的 useState 钩子函数,创建了名为 editableKeys 的状态和一个名为 setEditableRowKeys 的状态更新函数。并且初始值为空数组 []。

通过使用 editableKeys 和 setEditableRowKeys,你可以在组件中追踪和更新可编辑行的 key 值。通常情况下,当你添加、删除或修改可编辑行时,会使用 setEditableRowKeys 更新 editableKeys 的值,从而触发组件的重新渲染,并确保表格中的可编辑行与 editableKeys 的值保持同步。

useRef

useRef 是 React 中的一个 Hook,用于创建一个可变的引用(即 Ref),可以用来存储和访问组件或 DOM 元素的引用。

使用 useRef 创建的引用具有以下特点:

  • 引用的值发生改变时,不会触发组件的重新渲染
  • 可以通过 .current 属性访问引用的值,并且对其进行修改。
  • 可以在函数组件和类组件中使用。

虽然 useRef 创建的引用与普通的 JavaScript 引用类型类似,但它并不是一个对象,而是一个包含 .current 属性的简单对象。因此,如果你想要在组件之间共享状态,建议使用 useState 或其他状态管理库。

  const formRef = useRef<ProFormInstance<any>>();  

useRef 被用于创建一个名为 formRef 的引用,它的类型是 ProFormInstance。这个 formRef 变量将被传递给 组件的 formRef 属性,以便获取表单实例并进行后续操作。

这里useRef 主要是为了获取和操作 组件的表单实例。

通过给 组件传递 formRef 属性,并将其设置为 useRef 创建的引用,可以将表单实例保存到 formRef.current 中。这样,你就可以在组件的其他地方访问和操作表单实例,而无需将其作为 props 传递。

useRef 的主要作用是在函数组件中存储可变值,而且不会引起组件重新渲染。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值