0Pricing
React Academy · 课时

使用 useRef 管理非受控输入

在简单的表单场景中,通过 ref 而不是 state 访问 DOM 输入值。

使用 useRef 管理非受控输入 是 CoddyKit 上的免费 React Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。

欢迎

在本课中,您将使用带有 useRef 的非受控输入框访问 DOM 输入值,而无需在 React 状态中管理这些值。

受控与非受控

**受控输入框**的值由 React 状态驱动(值 + onChange)。**非受控输入框**在 DOM 中自行管理值;React 只在需要时通过 ref 读取它。
// Controlled
<input value={name} onChange={e => setName(e.target.value)} />

// Uncontrolled
const nameRef = useRef();
<input ref={nameRef} defaultValue="" />

提交时读取值

对于非受控输入框,请在用户提交表单时通过访问 `ref.current.value` 读取值。用户输入期间不会发生状态更新。
function Form() {
  const nameRef = useRef();
  const handleSubmit = (e) => {
    e.preventDefault();
    console.log(nameRef.current.value);
  };
  return (
    <form onSubmit={handleSubmit}>
      <input ref={nameRef} />
      <button type="submit">Submit</button>
    </form>
  );
}

defaultValue 与值

对于非受控输入框,请使用 `defaultValue`(而不是 `value`)设置初始值。在没有 `onChange` 的情况下设置 `value` 会使 React 发出警告,并使输入框变为只读。
<input ref={nameRef} defaultValue="Initial text" />

何时使用非受控输入框

非受控输入框适用于:只需在提交时获取值的简单表单、文件输入框(React 无法控制它们),以及注重性能且需要避免重新渲染的输入框。

重置非受控输入框

要重置非受控输入框,请以命令式方式设置 `ref.current.value = ''`。或者,修改组件的 `key` 属性,强制 React 使用新的 DOM 节点重新挂载该组件。
// Reset imperatively
nameRef.current.value = '';

// Or remount
setFormKey(k => k + 1);
<input key={formKey} ref={nameRef} />

为多个输入框使用多个引用

对于包含多个非受控字段的表单,请为每个输入框创建单独的引用。在提交时访问每个引用的 `.current.value`。
const emailRef = useRef();
const passwordRef = useRef();

<input ref={emailRef} type="email" />
<input ref={passwordRef} type="password" />

挂载时聚焦

useRef 常用于在组件挂载时自动聚焦输入框。请在挂载后,在 useEffect 中读取该引用。
const inputRef = useRef();
useEffect(() => {
  inputRef.current?.focus();
}, []);
<input ref={inputRef} />

非受控输入框与验证

验证非受控输入框需要在提交时以命令式方式读取值。对于实时验证,这比受控输入框更加繁琐。如果需要即时反馈,请优先使用受控输入框。

useRef 的权衡

非受控输入框可以避免重新渲染,但会失去 React 的响应能力。如果不读取引用并手动更新状态,就无法根据输入值实时进行条件渲染。

快速检查

在 React 中,应使用哪个属性为非受控输入框设置初始值?

回顾

非受控输入框使用引用按需读取值。使用 defaultValue 设置初始值,在提交时读取 ref.current.value,并通过清除引用值或修改 key 来重置输入框。

接下来

下一课:**文件输入与文件数据读取**——您将处理文件输入框,并使用 FileReader 读取元数据和图像数据。

常见问题解答

「使用 useRef 管理非受控输入」课时是免费的吗?

是的 — 「使用 useRef 管理非受控输入」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。

「使用 useRef 管理非受控输入」这节课中我会学到什么?

在简单的表单场景中,通过 ref 而不是 state 访问 DOM 输入值。 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 React Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「使用 useRef 管理非受控输入」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 React Academy 课中编写并运行代码吗?

能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 useRef 管理非受控输入
  2. 文件输入与读取文件数据
  3. 拖放文件上传界面
  4. 向后端 API 上传文件
← 返回 React Academy