受控组件

受控组件的步骤:
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中受控组件与非受控组件的使用的更多相关文章

  1. react中 受控组件和 非受控组件 浅析

    一 受控组件 顾名思义,受控 也就是能够被控制,简而言之也就是 该组件ui的显示或者内部state逻辑的变化依赖外部的 props的传入. 二 非受控组件 顾名思义,非受控,也就是内部的视图变化,st ...

  2. React:受控组件与非受控组件混用实战 - 译文

    原文链接:React: hybrid controlled components in action 受控组件 非受控组件 混用受控组件和非受控组件 原则一 原则二 原则三 原则四 实施方案 总结 F ...

  3. 浅谈react受控组件与非受控组件

    引言 最近在使用蚂蚁金服出品的一条基于react的ant-design UI组件时遇到一个问题,编辑页面时input输入框会展示保存前的数据,但是是用defaultValue就是不起作用,输入框始终为 ...

  4. React受控组件和非受控组件

    受控组件和非受控组件主要是用来解决表单组件状态谁来控制的问题.因为用户的输入会反应在界面上,相当于视图的状态发生了变化,而react是通过虚拟DOM比对修改视图的,这里就要决定谁来控制表单组件的状态. ...

  5. react 表单(受控组件和非受控组件)

    我们知道表单元素与其他的普通DOM元素来说是不一样的,它们保存了自己的一些状态. 我们主要说的就是表单元素中的受控组件和非受控组件. 受控组件就是这个组件的状态是我们(react)控制的,这个组件的行 ...

  6. react第十一单元(受控组件和非受控组件-实现类似于vue双向绑定的功能)

    第十一单元(受控组件和非受控组件-实现类似于vue双向绑定的功能) #课程目标 理解因为react的单向数据流 理解表单组件会因为react数据流变的不好维护 理解受控组件与非受控组件的实质区别 理解 ...

  7. react组件之非受控组件和高阶组件

    非受控组件 受控组件和非受控组件的区别 ----- value import React, { Component } from 'react' export default class extend ...

  8. Vue父子组件及非父子组件如何通信

    1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: 子组件通过props来接收数据: 方式1: 方式2 : 方式3: 这样呢,就实现了父组件向子组件传递数 ...

  9. react中受控组件与非受控组件--

    非受控组件:随用随取 1 render() { 2 return ( 3 <div> 4 <h1>非受控组件</h1> 5 <form action=&quo ...

  10. 学习React系列(四)——受控组件与非受控组件

    受控组件:通过组件的状态与属性的改变来控制组件 不可控组件:直接通过底层的dom来控制组件(具体来说就是通过绑定再底层dom上的方法来实现的,比如说ref,onChange) 受控组件 functio ...

随机推荐

  1. 升级win11显示:此版本的windows不支持该处理器—如何强升win11?

    今天的我微信笔记本 msi gp62 mvr 无论是win10升级到win11 还是安装win11都无法安装.显示: Windows 11不支持该处理器 win11系统升级标准要求相比win10来说有 ...

  2. 如何在Windows上将iOS应用上传到App Store

      Application Uploader iOS App上架工具是一款非常好用的针对iOS苹果应用程序软件开发的实用编程工具,它的主要作用是帮助用户进行快速的程序应用设计和程序应用调试,节省用户进 ...

  3. 为提高 SDLC 安全,GitHub 发布新功能|GitHub Universe 2022

    GitHub Universe 2022于上周举办.在此次大会上,Github 公布了开源软件状态的最新报告,报告中的统计数据显示,90% 的公司都在使用开源,现在 GitHub 上有9400万用户, ...

  4. 字节跳动基于火山引擎DataLeap的一站式数据治理架构实践

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在7月22日举行的 ArchSummit 全球架构师峰会(深圳站)上,来自火山引擎DataLeap的技术专家为大家 ...

  5. Java 网络编程 —— 实现非阻塞式的客户端

    创建阻塞的 EchoClient 客户程序一般不需要同时建立与服务器的多个连接,因此用一个线程,按照阻塞模式运行就能满足需求 public class EchoClient { private Soc ...

  6. 0x61 图论-最短路

    B题 Telephone Lines https://ac.nowcoder.com/acm/contest/1055/B 中文题面:https://www.luogu.com.cn/problem/ ...

  7. 【每日一题】21.边的染色 (DFS连通图 + 思维)

    补题链接:Here 思维不够,看到这种陌生的题目无从下手. 这题应该做过一次的人会觉得它其实并不难. 主要思想:把边权->点权. 这样做的好处是,无论你怎么分配点权,在环内的异或值一定为 \(0 ...

  8. Educational Codeforces Round 99 (Rated for Div. 2) (A ~ F)个人题解

    Educational Codeforces Round 99 (Rated for Div. 2) A. Strange Functions 读懂题即可(或者快速看一下样例解释),直接输出字符串长度 ...

  9. 三、swift大对象--动态大对象

    系列导航 一.swift对象存储环境搭建 二.swift添加存储策略 三.swift大对象--动态大对象 四.swift大对象--静态态大对象 五.java操作swift对象存储(官网样例) 六.ja ...

  10. 电脑面试两道问题(python+shell)

    最近面试电脑代码面试遇到两个问题,供大家参考一下一.python脚本: 手写一个函数,实现两个数相加,并使用unittest与pytest工具测试函数正确性. 1.unnitest进行测试: impo ...