目录

React-基础快速掌握-State事件和-Hook

React 基础:快速掌握 State、事件和 Hook

React 基础:快速掌握 State、事件和 Hook

学习 React 的过程可能感觉像是在一片概念的密林中穿梭。但一旦你掌握了核心概念,它就会成为构建动态 Web 应用的强大工具。本文将带你快速回顾支撑大多数 React 应用的几个核心概念:事件状态(State)Hook

React 的方式:处理事件和状态

在 React 中,你不会直接操作 DOM。相反,你使用的是一个 合成事件系统(Synthetic Event System),它是一个围绕原生事件(如 clickkeydownsubmit)的跨浏览器封装。事件处理程序的命名约定采用 驼峰式命名(例如 onClick 而非 onclick),并将函数引用作为处理程序传递。

当用户触发事件时,React 会向你的处理程序传递一个合成事件对象,其行为类似于原生事件对象,提供了 typetargetcurrentTarget 等属性。例如,你可以调用 preventDefault() 方法来阻止表单提交时页面刷新,或者使用箭头函数来传递额外的数据,比如 onClick={() => handleDelete(1)}

任何交互式 React 组件的核心是状态(state)。State 是一个包含动态数据的普通 JavaScript 对象。状态的黄金法则是它是不可变的——你永远不应该直接修改它。当状态更新时,React 会高效地重新渲染组件以反映这些变化。

useState Hook 是你为函数式组件添加状态的首选工具。它返回一个包含两个值的数组:当前状态变量和一个用于更新它的设置函数(setter function)

const [count, setCount] = useState(0);

当你需要更新状态中的对象或数组时,你必须始终创建一个新的。对于对象,使用扩展语法(...)来复制现有属性,然后再添加或更改新属性。对于数组,使用 filter() 或扩展语法等非变异方法来创建包含所需更改的新数组。这对于 React 检测变化并重新渲染至关重要。

你的组件如何显示在屏幕上:渲染过程

React 的渲染过程是一个三步走的“舞蹈”,让你的组件出现在页面上。

  1. 触发(Trigger):当某些东西(通常是状态或属性)发生变化时,它会触发 React,让其知道可能有必要更新 UI。
  2. 渲染(Render):React 重新评估组件并构建一个虚拟 DOM——一个轻量级的、内存中的真实 DOM 表示。在这个阶段,React 能够快速找出需要更改的部分。
  3. 提交(Commit):React 将从虚拟 DOM 中准备好的更改应用到真实的 DOM 上,使最终结果可见。这就是你在屏幕上看到 UI 更新的时刻。

深入了解:Refs 和 Effects

有时,你需要直接与真实 DOM 交互。这就是 Refs 的用武之地。你可以使用 useRef() Hook 创建一个 ref,并通过 ref 属性将其附加到元素上。真实的 DOM 节点可以通过 ref.current 来访问。这非常适合以编程方式聚焦输入框等任务。请记住,refs 用于访问 DOM,而不是管理状态。

Effects(副作用) 是发生在组件常规渲染流程之外的动作,例如从 API 获取数据、更新浏览器标签页标题或设置事件监听器。useEffect Hook 就是用来处理这些副作用的。

它接受两个参数:一个包含副作用逻辑的函数,以及一个可选的依赖数组,告诉 React 何时重新运行这个副作用。

  • 空数组([]:只在首次渲染时运行一次。
  • 包含值的数组([value]:在首次渲染和该值更改时运行。
  • 无数组:每次渲染时都会运行。

可重用性的力量:自定义 Hook

React 的内置 Hook 很棒,但如果你有一段复杂的逻辑想要在多个组件中复用怎么办?这就是自定义 Hook大放异彩的地方。

自定义 Hook 只是一个以 use 开头的 JavaScript 函数,它可以在内部调用其他 Hook。它允许你将数据获取或防抖计时器等逻辑从组件中提取出来,使你的代码更简洁、更具可重用性。例如,可以创建一个 useDebounce Hook 来延迟一个操作,直到用户停止输入,这非常适合搜索栏。

掌握了这些核心概念,你将能更好地构建健壮而高效的 React 应用。