react受控组件和非受控组件(此外也称约束组件)

React 中的受控组件和非受控组件是指表单元素(如 input、textarea、select 等)的两种不同管理方式。它们之间的主要区别在于状态的管理方式。

受控组件(Controlled Components)

1、受控组件通过 React 组件的状态(state)来管理表单元素的值。

2、当用户与表单元素交互时,触发事件(如 onChange),更新 React 组件的状态,进而更新表单元素的值。

3、通过 React 组件的状态来控制表单元素的值,从而实现数据的双向绑定。

javascript 复制代码
const [value, setValue] = useState('');

const handleChange = (event) => {
  setValue(event.target.value);
};

return (
  <input type="text" value={value} onChange={handleChange} />
);

非受控组件(Uncontrolled Components)

1、非受控组件中,表单元素的值由 DOM 元素本身来管理,而不受 React 组件的状态控制。

2、通常通过 ref 来获取表单元素的值,而不需要通过 React 组件的状态来管理。

3、开发者需要手动处理表单元素的值,无法利用 React 的状态自动管理表单元素的值。

javascript 复制代码
const inputRef = useRef(null);

const handleClick = () => {
  const value = inputRef.current.value;
  // 处理表单元素的值
};

return (
  <input type="text" ref={inputRef} />
  <button onClick={handleClick}>Submit</button>
);

选择使用受控组件还是非受控组件取决于具体的需求和开发场景。通常情况下,推荐使用受控组件,因为它更符合 React 的单向数据流模型,便于状态管理和数据流控制。但在一些特定情况下,非受控组件也可以提供更简洁的解决方案。

相关推荐
小小小小宇9 小时前
React17 18 19 新增能力、解决问题、原理与使用详解
前端
chushiyunen9 小时前
vue el-pagination实现分页
javascript·vue.js·elementui
by————组态9 小时前
Ricon组态可视化编辑器 - 所见即所得的工业画布
前端·javascript·物联网·架构·编辑器·组态
Csvn9 小时前
面试翻车现场:`Array(100).map(() => 1)` 为什么全为空?
前端
光影少年9 小时前
react大列表优化:虚拟列表原理
前端·javascript·react.js
星栈9 小时前
一套 Rust 代码跑三端:为什么我开始关注 Dioxus
前端·rust·前端框架
lichenyang4539 小时前
从两个 demo 说起:WebSocket 和 SSE 到底差在哪?
前端
如烟花的信页9 小时前
外贸*登录逆向分析
javascript·爬虫·python·js逆向
前端小端长9 小时前
AI时代前端的出路在哪里?
前端·ai·职业发展
四六的六9 小时前
WebView里跑RAG——浏览器内知识检索增强实战
前端·实战·个人开发·webview·ai大模型·rag·webview内嵌开发