React中受控组件与非受控组件的使用
受控组件
受控组件的步骤:
1.在state中添加一个状态,作为表单元素的value值(控制表单元素值的来源)
2.给表单元素绑定change事件,将表单元素的值设置为state的值(这样就可以控制表单元素值的变化)
受控组件的简单使用 index.js
import React from 'react'; //这个是react这个包,我们是需要的
import ReactDOM from 'react-dom'; //这个是react的虚拟dom
class ShowCont extends React.Component {
state = {
txet: '',
city: 'sh',
isChecked:''
}
// input的事件
changeTextHandler = (e) => {
this.setState({
txet:e.target.value
})
console.log(this.state.txet)
}
// 下拉框的事件
cityHandler = (e) => {
this.setState({
city:e.target.value
})
}
// 复选框的事件
changeCheck = (e) => {
this.setState({
isChecked:e.target.checked
})
}
// 获取的是所有的值
getAllHandler = () => {
console.log('获取的是所有的值:',this.state)
}
render() {
return (
<div>
{/* 普通的input */}
<input type="text" value={this.state.txet} onChange={this.changeTextHandler} />
{/* 下拉 */}
<select value={this.state.city} onChange={this.cityHandler} >
<option value="sh">上海</option>
<option value="bj">北京</option>
</select>
{/* 复选框 */}
<input type="checkbox" checked={this.state.isChecked} onChange={ this.changeCheck} />
<button onClick={this.getAllHandler}>获取值</button>
</div>
)
}
}
ReactDOM.render(<ShowCont/>, document.getElementById('root'))
受控组件的原理
文本框和文本域,下拉框操作的是value属性,通过change事件去更新。
复选框是通过checked属性和change事件去更新。
我们的发现
上面有不同的表单元素,如果表单元素有很多。
那我们是不是都要写不同的事件。去设置值呢?
这样操作会很麻烦的。
所以我们需要优化一下上面的代码。
我们发现:1.给表单元素添加name属性,名称与state相同。
value={this.state.txet} name='txet'
2.根据表单元素的类型获取对应的值
const formValue = target.type === 'checkbox'
? target.checked : target.value
3.在change事件中通过{name}来需要改对应的state中的值
this.setState({
[name]:formValue
})
优化上面的代码 index.js
import React from 'react'; //这个是react这个包,我们是需要的
import ReactDOM from 'react-dom'; //这个是react的虚拟dom
class ShowCont extends React.Component {
state = {
txet: '',
city: 'sh',
isChecked:''
}
// input
changeTextHandler = (e) => {
// 获取当前的dom对象
let target = e.target
// 根据类型获取值(key值)
let name = target.name
// 获取表单中的值
const formValue = target.type === 'checkbox' ? target.checked : target.value
// 设置值
this.setState({
[name]:formValue
})
}
// 获取的是所有的值
getAllHandler = () => {
console.log('获取的是所有的值:',this.state)
}
render() {
return (
<div>
{/* 普通的input */}
<input type="text" value={this.state.txet} name='txet' onChange={this.changeTextHandler} />
{/* 下拉 */}
<select value={this.state.city} name='city' onChange={this.changeTextHandler} >
<option value="sh">上海</option>
<option value="bj">北京</option>
</select>
{/* 复选框 */}
<input type="checkbox" checked={this.state.isChecked} name='isChecked' onChange={ this.changeTextHandler} />
<button onClick={this.getAllHandler}>获取值</button>
</div>
)
}
}
ReactDOM.render(<ShowCont/>, document.getElementById('root'))
非受控组件的使用方式
// 1.调用React.createRef()方法创建一个ref对象
this.textRef = React.createRef()
// 2.将创建好的ref对象添加到文本框中
<input type="text" ref={this.textRef} />
// 3. 通过ref对象获取文本框中的值
console.log('文本框中的值是:',this.textRef.current.value);
index.js使用非受控组件
import React from 'react'; //这个是react这个包,我们是需要的
import ReactDOM from 'react-dom'; //这个是react的虚拟dom
class ShowCont extends React.Component {
constructor() {
super()
// 1.调用React.createRef()方法创建一个ref对象
this.textRef = React.createRef()
}
getText = () => {
// 3. 通过ref对象获取文本框中的值
console.log('文本框中的值是:',this.textRef.current.value);
}
render() {
return (
<div>
{/* 2.将创建好的ref对象添加到文本框中 */}
<input type="text" ref={this.textRef} />
<button onClick={this.getText}>获取文本框中的值</button>
</div>
)
}
}
ReactDOM.render(<ShowCont/>, document.getElementById('root'))
React中受控组件与非受控组件的使用的更多相关文章
- react中 受控组件和 非受控组件 浅析
一 受控组件 顾名思义,受控 也就是能够被控制,简而言之也就是 该组件ui的显示或者内部state逻辑的变化依赖外部的 props的传入. 二 非受控组件 顾名思义,非受控,也就是内部的视图变化,st ...
- React:受控组件与非受控组件混用实战 - 译文
原文链接:React: hybrid controlled components in action 受控组件 非受控组件 混用受控组件和非受控组件 原则一 原则二 原则三 原则四 实施方案 总结 F ...
- 浅谈react受控组件与非受控组件
引言 最近在使用蚂蚁金服出品的一条基于react的ant-design UI组件时遇到一个问题,编辑页面时input输入框会展示保存前的数据,但是是用defaultValue就是不起作用,输入框始终为 ...
- React受控组件和非受控组件
受控组件和非受控组件主要是用来解决表单组件状态谁来控制的问题.因为用户的输入会反应在界面上,相当于视图的状态发生了变化,而react是通过虚拟DOM比对修改视图的,这里就要决定谁来控制表单组件的状态. ...
- react 表单(受控组件和非受控组件)
我们知道表单元素与其他的普通DOM元素来说是不一样的,它们保存了自己的一些状态. 我们主要说的就是表单元素中的受控组件和非受控组件. 受控组件就是这个组件的状态是我们(react)控制的,这个组件的行 ...
- react第十一单元(受控组件和非受控组件-实现类似于vue双向绑定的功能)
第十一单元(受控组件和非受控组件-实现类似于vue双向绑定的功能) #课程目标 理解因为react的单向数据流 理解表单组件会因为react数据流变的不好维护 理解受控组件与非受控组件的实质区别 理解 ...
- react组件之非受控组件和高阶组件
非受控组件 受控组件和非受控组件的区别 ----- value import React, { Component } from 'react' export default class extend ...
- Vue父子组件及非父子组件如何通信
1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: 子组件通过props来接收数据: 方式1: 方式2 : 方式3: 这样呢,就实现了父组件向子组件传递数 ...
- react中受控组件与非受控组件--
非受控组件:随用随取 1 render() { 2 return ( 3 <div> 4 <h1>非受控组件</h1> 5 <form action=&quo ...
- 学习React系列(四)——受控组件与非受控组件
受控组件:通过组件的状态与属性的改变来控制组件 不可控组件:直接通过底层的dom来控制组件(具体来说就是通过绑定再底层dom上的方法来实现的,比如说ref,onChange) 受控组件 functio ...
随机推荐
- Git 工具 - 子模块: submodule与subtree的使用
git日常使用中,基本都是一个项目一个Git仓库的形式,那么当我们的代码中碰到了业务级别的需要复用的代码,我们一般怎么做呢? 比如:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你独 ...
- NOKOV度量动作捕捉协助完成无人机室内定位研究
随着工业发展.技术进步,无人机的使用在各行各业愈发普遍,开始出现无人机飞行送外卖.智能无人机自主巡检等多方面应用.在这一过程中,无人机飞行定位就成为了重中之重. 西北工业大学无人机特种技术国防科技重点 ...
- 机器学习周刊 第4期:动手实战人工智能、计算机科学热门论文、免费的基于ChatGPT API的安卓端语音助手、每日数学、检索增强 (RAG) 生成技术综述
LLM开发者必读论文:检索增强(RAG)生成技术综述! 目录: 1.动手实战人工智能 Hands-on Al 2.huggingface的NLP.深度强化学习.语音课 3.Awesome Jupyte ...
- Linux day4:查看文件属性信息 inode和block 硬链接和软链接 inux系统时间 虚拟机克隆 linux定时任务 paramiko模块 公钥私钥
目录 文件属性信息 存储数据相关 inode block 访问文件原理 链接信息 硬链接 软链接 linux系统时间 虚拟机克隆 链接克隆和完整克隆 克隆之后的配置 linux定时任务 定时任务软件 ...
- sed 流编辑器
一.简介 非交互式的处理 一行一行的读入处理 占用系统空间少 大文件一般用sed节省内存 语法:语法 sed [选项] '行的定位 动作' 文件... 参数 说明 -e 允许进行多项编辑 -n 静默输 ...
- JSP常见错误以及解决方案
原作者为 RioTian@cnblogs, 本作品采用 CC 4.0 BY 进行许可,转载请注明出处. 本节我们分析一下常见的 JSP 错误信息,并给出解决方案.这些错误在实际开发中会经常遇到,所以有 ...
- 阿里云 X 森马 AIGC T恤设计大赛开启! 穿什么由你定,赢Airpods,作品定制联名T恤
"关于宇宙,我所知道的最富诗意的事实之一就是, 我们身体中的每一个原子都曾经存在于某一颗爆发的恒星里. 组成你左手的原子和组成你右手的原子 很有可能来自不同的恒星, 而我们都是恒星的孩子, ...
- java进阶(18)--Enum枚举
一.枚举基本概念 1.引用数据类型 2.每一个值可看作一个常量 3.方法返回结果>2时建议使用枚举,=2建议使用boolean 二.举例说明 1.程序1,方法返回为数字
- 【荐】开源Winform控件库:花木兰控件库
微信好友推荐,挺好看的Winfrom控件库,下面来看看. 介绍 基于 C#(语言) 4.0 . VS2019 . Net Framework 4.0(不包括Net Framework 4.0 Clie ...
- SD 控制器集成需求和寄存器列表
AHB Bus SD Bus DFT & Interrupt 控制集成需求 功能列表 控制器框架图 顶层信号 硬件集成环境 寄存器描述