在React中HTML的from元素与其他的DOM元素有些不同。因为表单元素自然而然的会有一些内部状态

一.controlled components

在HTML中,像input,select,textarea这些表单元素都会维持自己的状态,并且会基于用户输入更新状态。在React中,易变的状态通常保存在组件的state属性中,并且 使用setState()方法去更新。如果一个表单元素的值被React控制,那么这个组件就称为'controlled components' 在controlled component中,每一个state都有一个关联的handler方法,通过它可以直接的修改或者验证用户输入

class NameFrom extend React.Component{
constructor(props){
super(props);
this.state = {name:''}
}
handleSubmit(event){
console.log(this.state.name);
event.preventDefault();
}
handleChange(event){
console.log(this.state.name);
this.setState({
name:event.target.value
});
}
render(){
return (
<from onSubmit={this.handleSubmit.bind(this)}>
<input type='text' name='name' value={this.state.name} onChange={this.handleChange.bind(this)}/><br>
<input type='submit' value='submit'>
</from>
)
}
};

二.textarea 标签

在HTML中,textarea的文本信息定义在它的子元素中

<textarea>there are text</textarea>

在React中,textarea的文本信息用value属性定义.所以在表单中,textarea的写法与单行文本非常相似

三.select 标签

在React中在select元素上设置value属性,表示被选中的选项

四.处理多个input

当你需要处理多个controlled的input元素,你可以在每一个input元素上设置一个name属性,并且在handler函数中根据event.target.name的值去做不同的操作

class MyFrom extend React.Component{
constructor(props){
super(props);
this.state = {
name:'',
age:''
};
}
handleChange(event){
let name = event.target.name;
this.setState({
[name]:event.target.value
});
console.log(this.state);
}
render(){
return (
<from>
<input type='text' name='name' value={this.state.name} onChange={this.handleChange.bind(this)}/>
<input type='text' name='age' value={this.state.age} onChange={this.handleChange.bind(this)}/>
</from>
)
}
}

五.Uncontrolled Components

推荐在大多数时候都使用controlled Component实现表单,在controlled Component中,表单数据被react组件控制,在uncontrolled component中,数据被
DOM自己控制。在uncontrolled component中不需要为每一个要更新的state写一个handler函数,而是通过ref从DOM中得到表单数据

class Uncontrolled extend React.Component{
constructor(props){
super(props);
}
handleSubmit(event){
console.log(this.input.value);
event.preventDefault();
}
refFunc(input){
this.input = input;
}
render(){
return (
<from onSubmit={this.handleSubmit.bind(this)}>
<input type='text' name='name' ref={this.refFunc.bind(this)}/>
<input type='submit' value='提交'/>
</from>
)
}
}

如果在一个Uncontrolled Components上设置value属性会让该组件的成为一个只读组件,如果想给Uncontrolled <input type='text'>
设置初始值可以使用defaultValue属性
<input type="checkbox"> 和 <input type="radio"> 使用 defaultChecked, <select> and <textarea> 使用 defaultValue.

React——from的更多相关文章

  1. react组件的生命周期

    写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...

  2. 十分钟介绍mobx与react

    原文地址:https://mobxjs.github.io/mobx/getting-started.html 写在前面:本人英语水平有限,主要是写给自己看的,若有哪位同学看到了有问题的地方,请为我指 ...

  3. RxJS + Redux + React = Amazing!(译一)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...

  4. React 入门教程

    React 起源于Facebook内部项目,是一个用来构建用户界面的 javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组件内 ...

  5. 通往全栈工程师的捷径 —— react

    腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...

  6. 2017-1-5 天气雨 React 学习笔记

    官方example 中basic-click-counter <script type="text/babel"> var Counter = React.create ...

  7. RxJS + Redux + React = Amazing!(译二)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>的后半部分翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: ht ...

  8. React在开发中的常用结构以及功能详解

    一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...

  9. React的使用与JSX的转换

    前置技能:Chrome浏览器   一.拿糖:React的使用 React v0.14 RC 发布,主要更新项目: 两个包: React 和 React DOM DOM node refs 无状态的功能 ...

  10. Vue.js 2.0 和 React、Augular等其他框架的全方位对比

    引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那么你就来对了. 客观来说,作为核心团队成员,显然我们会 ...

随机推荐

  1. ABP+AdminLTE+Bootstrap Table权限管理系统第九节--AdminLTE模板页搭建

    AdminLTE 官网地址:https://adminlte.io/themes/AdminLTE/index2.html 首先去官网下载包下来,然后引入项目. 然后我们在web层添加区域Admin以 ...

  2. <Mastering KVM Virtualization>:第二章 KVM内部原理

    在本章中,我们将讨论libvirt.QEMU和KVM的重要数据结构和内部实现.然后,我们将深入了解KVM下vCPU的执行流程. 在这一章,我们将讨论: libvirt.QEMU和KVM的内部运作方式. ...

  3. 分辨率验证工具 - 【Firesizer】的使用

    Firesizer是一款测试分辨率的插件. 下载方式:Firefox工具栏——〉工具——〉附加组件--〉搜索Firesizer并安装,浏览器会自动重启 使用方式:浏览器右下角直接切换分辨率即可,如下图 ...

  4. .NET Core 2.0 是您的最好选择吗?

    本月14日,微软发布.NET Core 2.0 正式版,它的发布意味着.NET Core平台更加成熟,也预示其更美好的未来.本文将分析.NET Core 的特性以及未来发展方向,为开发人员选择在何种平 ...

  5. OSX 监听系统网络设置

    由于日常开发的需求,我们需要监听OSX一些系统设置的变化,达到软件程序设置的同步,这时我们可以通过以下函数监听系统设置的改变: #include <SystemConfiguration/Sys ...

  6. python3 接口测试 一般方法

    第一步: 导入相关包 import http.client 第二步: 将ip和端口号,使用如下命令,赋值给变量. conn = http.client.HTTPConnection("124 ...

  7. css盒子边框样式

    边框样式有全边框和单个边框样式,可对每条边设置不同的样式 如下代码P1为全边框样式,P2为单个边框设置不同的样式: <!DOCTYPE html> <html lang=" ...

  8. JMeter元件的作用域和执行顺序

    元件的作用域 配置元件:会影响其作用范围内的所有元件,作用范围是最大的,只要创建就对所有元件起作用. 前置处理器:在其作用范围内的每一个Sample元件之前执行: 定时器:对其作用范围内的每一个Sam ...

  9. Mysql中较为复杂的分组统计去重复值

    这是我的代码: 前提是做了一个view:att_sumbase 首先分开统计每天的中午.下午饭点人数,这时需要分别去除中午和下午重复打卡的人.用了记录集的交,嵌套select的知识. 注意不能直接使用 ...

  10. oracle运行速度与效率高的秘密

    使用过Oracle的人都知道,Oracle的运行速度与效率,在同类数据库中是名列前茅的,特别是对大量数据进行访问时,更加有出色的表现.那么,Oracle数据库是靠什么实现的呢?笔者下面将通过一系列的文 ...