当前位置: 首页 > news >正文

受控组件非受控组件

在 React 中,受控组件(Controlled Components) 和 非受控组件(Uncontrolled Components) 主要区别在于 表单数据的管理方式。


  1. 受控组件(Controlled Components)

表单元素的值受 React 组件状态(state)控制,必须通过 onChange 更新值。
✅ 推荐使用,因为数据流更可控,便于调试。

示例

import { useState } from ‘react’;

function ControlledInput() {
const [value, setValue] = useState(’’);

return (
<input
type=“text”
value={value} // 受 state 控制
onChange={(e) => setValue(e.target.value)} // 触发更新
/>
);
}

特点

✅ 值存储在 state 中,修改时必须通过 setValue 更新。
✅ 可控性强,可以进行数据校验、格式化、限制输入等操作。
✅ 适用于需要动态更新 UI 的场景(如实时校验、联动)。


  1. 非受控组件(Uncontrolled Components)

表单元素的值不受 React 组件状态控制,而是通过 ref 直接操作 DOM 获取值。
❌ 一般不推荐,除非特殊情况(如兼容第三方库)。

示例

import { useRef } from ‘react’;

function UncontrolledInput() {
const inputRef = useRef(null);

const handleSubmit = () => {
alert(inputRef.current?.value); // 直接从 DOM 获取值
};

return (


{/* 非受控 */}
提交

);
}

特点

✅ 适用于 需要和 非 React 代码交互 的情况,比如 第三方库、文件上传。
✅ 不会触发组件重新渲染,性能开销小。
❌ 不受 React 状态控制,不便于数据校验、格式化和调试。


  1. 何时用受控 vs. 非受控

最佳实践:

大多数情况下,使用受控组件,方便管理和调试。

如果不需要频繁更新 UI,或者要和原生/第三方库交互,使用非受控组件。

相关文章:

  • 论文阅读:Deep Hybrid Camera Deblurring for Smartphone Cameras
  • 【工作记录】pytest使用总结
  • 深度学习中的并行策略:数据并行、流水并行与张量并行
  • DR-CAN 卡尔曼滤波笔记
  • Python库安装报错解决思路以及机器学习环境配置详细方案
  • 机器学习中说的正向传递和反向传递是什么意思
  • NFS网络文件共享服务
  • mysql-8.0.40-1.el7.x86_64.rpm Linux MySQL 保姆级详细安装教程(2025版)
  • 【技术报告】谷歌开源多模态大模型 Gemma-3
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(59)定风珠稳调度 - 任务调度器(贪心桶思想)
  • 鸿蒙开发:自定义一个搜索模版
  • lspci命令
  • ctfshow-web-351-360-ssrf-wp
  • PyTorch使用-张量的创建
  • K8s集群的环境部署
  • ⭐算法OJ⭐两数之和【哈希表】(C++ 实现)Two Sum
  • 三. Zabbix安装
  • ​详细介绍 SetWindowPos() 函数
  • 基于 SSE 和 WebSocket 的在线文本实时传输工具
  • 【商城实战(37)】Spring Boot配置优化:解锁高效商城开发密码
  • 北美票房|华纳又赢了,《死神来了6》开画远超预期
  • 国家统计局:4月社会消费品零售总额同比增长5.1%
  • 石家庄桥西区通报“中药液”添加安眠药问题:对医院立案调查
  • 体坛联播|雷霆抢七淘汰掘金,国米错失意甲登顶良机
  • 以色列总理:以哈谈判内容包括“结束战争的框架”
  • 解读|战国子弹库帛书漂泊海外79年今归国,追索仍将继续