
React 学习笔记 —— 非受控组件与受控组件
, document.getElementById('test')); , document.getElementById('test'));
发布日期:2021-05-12 21:18:30
浏览次数:14
分类:精选文章
本文共 1645 字,大约阅读时间需要 5 分钟。
React组件中的输入绑定:非受控组件与受控组件对比
在React开发中,处理表单输入通常有两种方式:非受控组件和受控组件。了解这两种方式的区别对提高开发效率至关重要。
非受控组件
非受控组件的特点是现用现取。当你在表单中输入内容后,通过事件触发回调函数时,才会将输入值取出进行处理。这种方式简单且灵活,但存在一定的开发复杂度。
示例代码
class Login extends React.Component { handleSubmit = (event) => { event.preventDefault(); const { username, password } = event.target.elements; alert(`你输入的账号是${username.value}, 密码是${password.value}`); }; render() { return (); }}ReactDOM.render(
优点
- 每次事件触发时立即获取最新输入值,确保数据的一致性。
- 适合简单的动态数据获取场景。
缺点
- 需要手动操作
ref
属性,增加了维护成本。 - 对于多个输入场景,代码会变得冗长。
受控组件
受控组件则完全不同于非受控组件。通过维护组件的内部状态,所有输入操作都会自动更新状态值。Stateful组件能够在任何时候直接访问输入数据,无需通过事件回调进行处理。
示例代码
class Login extends React.Component { state = { username: '', password: '' }; saveUsername = (event) => { this.setState({ username: event.target.value }); }; savePassword = (event) => { this.setState({ password: event.target.value }); }; handleSubmit = (event) => { event.preventDefault(); const { username, password } = this.state; alert(`你输入的账号是${username}, 密码是${password}`); }; render() { return (); }}ReactDOM.render(
优点
- 归属于双向绑定模式, posture VueJS中的
v-model
。 - 状态维护统一,避免了回调函数的复杂性。
- 合并了多个输入操作到一个状态中。
缺点
- 需要最初初始化状态,增加了初期配置量。
对比总结
非受控组件适用于简单场景,而受控组件则更适合复杂或多个输入场景的动态管理。推荐使用受控组件因为其ologically更简洁,而且不需要手动操作ref
属性。
注意事项
- 如果你的项目中有多个输入项,直接使用受控组件。
- 受控组件的状态维护确保数据的一致性,降低了错误率。
- 如果你熟悉Vue或其他框架的双向绑定模式,受控组件会更容易理解和使用。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月06日 21时20分54秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
JS实现删除行按钮只有一行时不能删除
2019-03-11
有问题找男人帮忙- Linux下man命令
2019-03-11
如何复用外部shell脚本
2019-03-11
VTK:小部件之SeedWidgetWithCustomCallback
2019-03-11
JAVA集合类Collection浅析
2019-03-11
嵌入式软件工程师职业路线
2019-03-11
获取linux 主机cpu类型
2019-03-11
限流的算法有哪些?
2019-03-11
Failed to notify build listener.
2019-03-11
TextWiew单个线条
2019-03-11
Android Studio updating indices 一直刷新和闪烁
2019-03-11
基于vant-ui的时间选择器二次封装
2019-03-11
个人购买服务器问题?
2019-03-11
pwntools编写技巧
2019-03-11
Python开发常见漏洞
2019-03-11
How2Heap笔记(三)
2019-03-11
阿里云轻量云GPU服务器配置
2019-03-11
go--microSocket服务端 php客户端
2019-03-11
如何修改Pspice元件库中元件的模型参数?
2019-03-11