之前的文章我们介绍了  React 事件,方法, React定义方法的几种方式 获取数据 改变数据 执行方法传值。接下来我们将介绍 React 表单事件 键盘事件 事件对象以及 React中 的 ref 获取 dom 节点 、双向数据绑定,约束性和非约束性组件。

 import React, {Component} from 'react';

 class Home extends Component {
constructor(props) {
super(props);
this.state = {
name: "zhangsan",
}; } getData = (event) => {
console.log(this.state.name);
event.target.style.color = "red";
} // event
inputChange1 = (event)=>{
this.setState({
name: event.target.value
})
} // ref
inputChange2 = ()=>{
this.setState({
name: this.refs.name.value
})
} // 键盘事件
inputChange3 = (event)=>{
console.log(event.keyCode)
} inputGet = () =>{
console.log(this.state.name)
} render() {
return (
<div>
<p>Hello {this.state.name}</p> <button onClick={this.getData}>获取event</button> <br/><br/> {/*event*/}
<input onChange={this.inputChange1} type="text"/>
<button onClick={this.inputGet}>获取input值</button> <br/><br/> {/*ref*/}
<input ref="name" onChange={this.inputChange2} type="text"/>
<button onClick={this.inputGet}>获取input值</button> <br/><br/> {/*键盘事件*/}
<input onKeyUp={this.inputChange3} type="text"/>
<button onClick={this.inputGet}>获取input值</button> <br/><br/> {/*value defaultValue*/}
<input value={this.state.name} onChange={this.inputChange1} type="text"/>
<input defaultValue={this.state.name} onChange={this.inputChange1} type="text"/>
</div>
);
}
} export default Home;

在调用 getData 的方法时传值 event,就可以获取到该元素的原生 DOM 属性,我们可以对其进行操作,如改变元素颜色:event.target.style.color = "red";

在 React 中并没有提供类似于 Vue 中 model 的双向数据绑定,所以我们得自己来写,在 input 框中输入内容时我们可以根据 onChange 事件实时获取 input 框中的内容,再通过 event 事件获取到原生 DOM 里面的 value 值再赋给 this.state 中的数据,既可以达到双向数据绑定的目标。

当然 React 提供了类似于 Vue 的 ref 属性,我们同样可以通过 ref 绑定属性名,然后通过 refs 获取到该属性名,就能获取到 input 框的 value 值。然后达到双向数据绑定的目标。

React 中同样为我们提供了键盘事件 onKeyUp 和 onKeyDown ,我们可以根据该事件达到双向数据绑定的目标。

在 input 框最初赋值时可以有 value 和 defaultValue 两种赋值方式,

defaultValue 是原生 DOM 中的 value 属性,可以是一个死值,也可以是 this.state 中的数据,React 不会去管它。这样的组件叫做非约束性组件。

value 是 React 中的一个属性,它的值可以是一个死值,也可以是 this.state 中的数据, 但是需要通过 onChange 事件配合使用,如果不写 onChange 事件会报错。这样的组件叫做非约束性组件。

最后运行结果为:

React 从入门到进阶之路(五)的更多相关文章

  1. React 从入门到进阶之路(九)

    之前的文章我们介绍了 React propTypes  defaultProps.接下来我们将介绍 React 生命周期函数. 之前我们已经根据 create-react-app 模块创建了一个 Re ...

  2. React 从入门到进阶之路(四)

    之前的文章我们介绍了  React 绑定属性( 绑定class  绑定style).引入图片  循环数组渲染数据.接下来我们将介绍 React 事件,方法, React定义方法的几种方式 获取数据 改 ...

  3. React 从入门到进阶之路(三)

    之前的文章我们介绍了 React 创建组件.JSX 语法.绑定数据和绑定对象.接下来我们将介绍 React 绑定属性( 绑定class  绑定style).引入图片  循环数组渲染数据. 上一篇中我们 ...

  4. React 从入门到进阶之路(七)

    之前的文章我们介绍了 React 表单详解 约束性和非约束性组件 input text checkbox radio  select  textarea  以及获取表单的内容.接下来我们将介绍 Rea ...

  5. React 从入门到进阶之路(六)

    之前的文章我们介绍了 React 表单事件 键盘事件 事件对象以及 React中 的 ref 获取 dom 节点 .双向数据绑定.接下来我们将介绍 React 表单详解 约束性和非约束性组件 inpu ...

  6. React 从入门到进阶之路(八)

    之前的文章我们介绍了 React中的组件.父子组件.React props父组件给子组件传值.子组件给父组件传值.父组件中通过refs获取子组件属性和方法.接下来我们将介绍 React propTyp ...

  7. React 从入门到进阶之路(二)

    在之前的文章中我们介绍了 React 开发的环境搭建及目录介绍和整理,本篇文章将介绍 React 创建组件.JSX 语法.绑定数据和绑定对象. 之前我们已经将项目运行了起来,我们再来看一下目录结构: ...

  8. React 从入门到进阶之路(一)

    在开始 React 学习之前我们先进入官网 https://react.docschina.org/ 看看官方对 React 的解释:React 是用于构建用户界面的JavaScript 库.我们只需 ...

  9. koa2 从入门到进阶之路 (五)

    之前的文章我们介绍了一下 koa 中使用 ejs 模板及页面渲染,本篇文章我们来看一下 koa post提交数据及 koa-bodyparser中间件. 在前端页面中,不免会用到 form 表单和 p ...

随机推荐

  1. 高德地图API开发二三事(一)如何判断点是否在折线上及引申思考

    最近使用高德地图 JavaScript API 开发地图应用,提炼了不少心得,故写点博文,做个系列总结一下,希望能帮助到LBS开发同胞们. 项目客户端使用高德地图 JavaScript API,主要业 ...

  2. Hadoop-2.2.0中文文档—— MapReduce 下一代--容量调度器

    目的 这份文档描写叙述 CapacityScheduler,一个为Hadoop能同意多用户安全地共享一个大集群的插件式调度器,如他们的应用能适时被分配限制的容量. 概述 CapacitySchedul ...

  3. 解决MAC Appium设备连不上IOS的的问题'idevice_id' program is not installed

    解决MAC Appium设备连不上IOS的的问题 错误的: [XCUITest] The 'idevice_id' program is not installed. If you are runni ...

  4. NiFi汉化

    ①在源文件中的 source-nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src中修 ...

  5. webpack笔记1

    1.设置多个入口起点 多用于提取公共类库 a.利用commonChunkPlugin const webpack= require('webpack'); const path = require(' ...

  6. ARP之windows下的ARP命令

    ARP之windows下的ARP命令 arp -a 查看当前电脑上的ARP映射表.可以看到当前的ARP的映射关系是动态的还是静态的. arp -s w.x.y.z aa-bb-cc-dd-ee-ff ...

  7. BZOJ 1677 [Usaco2005 Jan]Sumsets 求和:dp 无限背包 / 递推【2的幂次方之和】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1677 题意: 给定n(n <= 10^6),将n分解为2的幂次方之和,问你有多少种方 ...

  8. 如何改变cmd窗口大小

      按下Win+R(windows徽标和R一起按),再输入cmd. 输入mode ,查看当前屏幕的大小,来为后面准备(大概估计数值大小). 再输入mode con:cols=400 lines=400 ...

  9. findbugs规则

    FindBugs是基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug,主要检查bytecode中的bug patterns,如NullPoint空指针检查 ...

  10. python-函数用法

    Python 一.lower() 方法转换字符串中所有大写字符为小写. lower()方法语法: str.lower() 参数 无. 返回值 返回将字符串中所有大写字符转换为小写后生成的字符串. 练习 ...