将state与表单项中的value值绑定在一起,有state的值来控制表单元素的值,称为受控组件。

绑定步骤:

  • 在state中添加一个状态,作为表单元素的value值
  • 给表单元素绑定change事件,将表单元素的值设置为state的值

<input type="text" value={this.state.username} onChange={this.inputChange.bind(this)} />

注:多表单元素需优化事件方法

this.setState({

[e.target.name]: e.target.value

})

import React, { Component } from 'react'

export default class User2 extends Component {

  state = {
userinfo: {
username: 'admin',
password: '',
isSave: true,
sex: '女'
}
} render() {
let { username, password, isSave, sex } = this.state.userinfo
return (
<div>
<div>
{/* 受控组件 */}
{/* 表单选项中的值都是string */}
<input type="text" name="username" value={username} onKeyUp={this.addUser.bind(this)} onChange={this.setInput.bind(this)} />
</div>
<div>
{/* 受控组件 */}
{/* 表单选项中的值都是string */}
<input type="text" name="password" value={password} onKeyUp={this.addUser.bind(this)} onChange={this.setInput.bind(this)} />
</div> <div>
{/* 不需要value中的数据 同时它还需要true/false布尔类型 */}
<input type="checkbox" name="isSave" checked={isSave} onChange={this.setInput.bind(this)} />是否保存数据
</div> <div>
<input type="radio" name="sex" checked={sex === '男' ? true : false} value="男" onChange={this.setInput.bind(this)} />男
<input type="radio" name="sex" checked={sex === '女' ? true : false} value="女" onChange={this.setInput.bind(this)} />女
</div> </div>
)
} // 把input中的数据同步到state数据源中
setInput(evt) {
// 表单项名称 变量 => 变量的值才是对象中的key
let name = evt.target.name // 获取表单项中的数据
let value = evt.target.value // 复选框 它需要boolean类型
if ('checkbox' === evt.target.type) {
value = !this.state.userinfo[name]
} // 同步到state数据源中
this.setState(state => state.userinfo[name] = value)
} addUser(evt) {
if (evt.keyCode === 13) {
console.log('提交了数据', this.state.userinfo);
this.setState(state => state.userinfo.username = '')
}
// console.log(this.state.userinfo);
} }

react表单处理 受控组件的更多相关文章

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

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

  2. 翻译 | 玩转 React 表单 —— 受控组件详解

    原文地址:React.js Forms: Controlled Components 原文作者:Loren Stewart 译者:小 B0Y 校对者:珂珂君 本文涵盖以下受控组件: 文本输入框 数字输 ...

  3. 七、React表单详解 约束性和非约束性组件 input text checkbox radio select textarea 以及获取表单的内容

    一.约束性和非约束性组件: 非约束性组: MV: <input type="text" defaultValue="a" /> 这个 default ...

  4. 第四节:Vue表单标签和组件的基本用法,父子组件间的通信

    vue表单标签和组件的基本用法,父子组件间的通信,直接看例子吧. <!DOCTYPE html> <html> <head> <meta charset=&q ...

  5. react 表单获取多个input

    react  表单this.handleChange(key,e){ [key]:e.target.value} submit=()=>{ const {userName,age,status} ...

  6. 028、HTML 标签3表单标签插入组件

    内容:表单标签插入组件(经常使用)############################################################## form表单标签和input组件 < ...

  7. vue+element 表单封成组件(1)

    作为一名刚接触vue不到一个月的菜鸟,思想还没有从操作DOM转变为数据驱动,看vue的代码处处别扭.组里为了让我熟悉vue交给了我一个将element 表单封装成组件的练手任务.由于开发过程中遇到的表 ...

  8. React 表单组件

    诸如 <input>.<textarea>.<option> 这样的表单组件不同于其他组件,因为他们可以通过用户交互发生变化.这些组件提供的界面使响应用户交互的表单 ...

  9. [转]React表单无法输入原因----约束性和非约束性组件

    转自:http://blog.csdn.net/lihongxun945/article/details/46730835 表单是前端非常重要的一块内容,并且往往包含了错误校验等逻辑. React对表 ...

  10. react 表单受控和非受控

    参见:https://goshakkk.name/controlled-vs-uncontrolled-inputs-react/ 非受控: onSubmit = ()=>{ const val ...

随机推荐

  1. Redis持久化技术浅析

    Redis是一种内存数据库,数据都存储在内存中,因此可以快速地直接基于内存中的数据结构进行高性能的操作,但是所有数据都在内存中,一旦服务器宕机,内存中的数据就会全部丢失,数据将无法恢复,因此Redis ...

  2. Linux下的权限(角色,文件权限)

    目录 1.什么是权限 2.文件类型及权限 ①Linux文件类型: ②剩余9个字符对应的含义: ③文件权限值的表示方法(进制法) 3.如何操作权限 3.1改变权限的命令操作 chmod #change ...

  3. Oracle SQL 创建一个简单的存储过程procedure

    Oracle 简单的创建一个存储过程procedure 如果学过别的语言,例如java,c这些,那么其实很好理解,其实就是面向数据库的操作 简单的例子如下: --创建或者重写存储过程 create o ...

  4. 如何避免 Go 命令行执行产生“孤儿”进程?

    简介: 在 Go 程序当中,如果我们要执行命令时,通常会使用 exec.Command ,也比较好用,通常状况下,可以达到我们的目的,如果我们逻辑当中,需要终止这个进程,则可以快速使用 cmd.Pro ...

  5. 基于 MaxCompute 的智能推荐解决方案

    简介: 在互联网行业红利已过.在获客成本越来越高.在用户在线时长全网基本无增长以及信息大爆炸的情况下,如何更好的转化新用户和提升老用户粘性就变得至关重要,智能化的个性化推荐无疑是经过验证的重要手段之一 ...

  6. 6.prometheus监控--监控redis/rabbitmq/mongodb

    1.监控redis 1.1 redis_exporter安装方式 1.1.1 二进制源码安装方式 参考nginx二进制安装方法 redis_exporter下载地址:https://github.co ...

  7. netcore3.1 程序在cento8下运行selenium

    我需要在linux下运行selenium抓取数据,本人不熟悉Python,所以只能用netcore.在带linux界面上运行爬取程序,驱动chromedriver比较简单.界面化安装好chrome,下 ...

  8. EXCEL-统计sheet个数、统计指定单元格个数

    Excel的函数,可以直接在里面执行 1.统计sheet个数 =SHEETS() 参考:https://office.tqzw.net.cn/excel/excel/8168.html 2.统计单元格 ...

  9. 简说python之初连ORACLE数据库

    目录 Python操作Oracle数据库 1.安装cx_Oracle模块 2.安装oracle客户端 3.python操作oracle示例 4.配置TNS 5.通过tns连接数据库的python 通过 ...

  10. Golang、python中MD5、SHA512、base64编码等

    在GO中处理的话,比较方便. func main() { fmt.Println(md5Str("woGo")) fmt.Println(sha512Str("woGo& ...