import React from 'react';

class Baby extends React.Component {
constructor (props) {
super(props)
this.state={
name:'小兵'
}
//第二种改变this指向的方法 this.changeName2= this.changeName2.bind(this);
}
// 方法根render同级 方法1
changeName1(){
console.log(this.state.name)
this.setState({
name:'士兵'
})
}
// 方法根render同级 方法2 在构造函数中改变this指向(最常用的之一)
changeName2(){
this.setState({
name:'中师'
})
}
// 方法三 箭头函数绑定上下文的this就是组件本身(最常用就是这个)
changeName3=()=>{
console.log(this)
this.setState({
name:'将军'
})
}
// 对于有参数的怎么搞函数有参数
getName=(e)=>{
this.setState({
name:e
})
alert(e)
}
render (){
return (
<div>
<p>我是{this.state.name}</p>
<button onClick={this.changeName1.bind(this)}>点我改变名字方法@1</button>
<button onClick={this.changeName2}>点我改变名字方法@2</button>
<button onClick={this.changeName3}>点我改变名字方法@3</button> <br></br>
<button onClick={this.getName.bind(this,'我是传递的参数')}>函数有参数传递的写法</button> </div>
)
}
}
export default Baby

  React中好像没有简写  onClick   Vue中有简写@click

React中事件的写法有三种最主要还是箭头函数这一种,vue 就@click='事件名',然后在methods中写对应的事件名(){  doSomething  }有参数就传递参数就行了

React不一样啊,它没有vue的methos用于把所有方法集合到一起,它的方法跟render写在同级目录,而且写完之后不用加逗号,

 
最推荐还是箭头函数写的,最常用,有参数传递的时候就得bind this,

其中React改变数据是

this.setState({
  name:'中师'
})
vue中是  change(){
    this.name=''将军'
  }
 
注意看区别哟
***************************************************************************************事件对象**************************************************************************************************************

事件对象:在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息(与原生JS一样啊),说白了就是获取DOM节点

当然你知道就行,其实用得最多的还是ref去获取DOM节点,

vue中用ref也比较多一点

获取输入框的值(通过事件对象来获取,也可以通过ref来获取)

下面是通过事件对象来获取:

通过ref来获取

对比一下这两个,发现其实都一样,一个是通过事件对象获取DOM节点,一个是通过ref获取DOM节点,区别不大,常用ref

***********************************************************************************************************键盘事件**************************************************************************************************************

React的键盘事件更像原生的js 事件 我是这么理解的哈

******************************************************************************实现双向数据绑定**************************************************************************

以前啊,面试的时候都说react是单项数据流,怎么实现双向绑定呢?vue渐渐v-model就搞定

首先在react中我们通过点击事件去改变state中的值的时候,这种情况就是数据(model)改变--》view视图就会跟着改变

现在来实现view改变,model跟着改变,这个怎么实现呢,其实很简单啊,输入框去监听他的onChange事件,然后拿到这个值,然后赋值给state中你想要赋的字段的值

这么理解简单了不?

上面的实现数据双向绑定的时候,使用到input的value属性,并通过onChange事件来监听这个属性值的变化,但是当我们使用了value属性却没有监听改变事件的时候,就会报错。

在警告信息中提醒我们使用defaultValue,因此,当把value换成defaultValue时,就不会报错了。

那么这个value和defaultValue有什么区别呢,这就是今天要总结的约束性组件和非约束性组件。

所谓的非约束性组件,就是在<input type="text" defaultValue="a" /> 中,这个 defaultValue 其实就是原生DOM中的 value 属性。这样写出的来的组件,其value值就是用户输入的内容,React完全不管理输入的过程。

而约束性组件是指在<input value={this.state.username} type="text" onChange={this.handleUsername} />中,value属性不再是一个写死的值,他是 this.state.username, this.state.username 是由 this.handleChange 负责管理的。这个时候实际上 input 的 value 根本不是用户输入的内容。而是onChange 事件触发之后,由于 this.setState 导致了一次重新渲染。不过React会优化这个渲染过程。看上去有点类似双向数据绑定。

因此,我们可以根据自己的需要来决定是用defaultValue还是value了。

React对比Vue(03 事件的对比,传递参数对比,事件对象,ref获取DOM节点,表单事件,键盘事件,约束非约束组件等)的更多相关文章

  1. React 事件对象、键盘事件、表单事件、ref获取dom节点、react实现类似Vue双向数据绑定

    1.案例实现代码 import React, { Component } from 'react'; /** * 事件对象.键盘事件.表单事件.ref获取dom节点.react实现类似Vue双向数据绑 ...

  2. 六、React 键盘事件 表单事件 事件对象以及React中的ref获取dom节点 、React实现类似Vue的双向数据绑定

    接:https://www.cnblogs.com/chenxi188/p/11782349.html 事件对象 .键盘事件. 表单事件 .ref获取dom节点.React实现类似vue双向数据绑定 ...

  3. Vue 双向数据绑定、事件介绍以及ref获取dom节点

    vue是一个MVVM的框架 M model V view MVVM  model改变会影响视图view,view改变会影响model 双向数据绑定必须在表单里面使用 //我发现在谷歌浏览器翻译后的网页 ...

  4. vue 双向数据绑定 Vue事件介绍 以及Vue中的ref获取dom节点

    <template> <div id="app"> <h2>{{msg}}</h2> <input type="te ...

  5. Vue 及双向数据绑定 Vue事件 以及Vue中的ref获取dom节点

    <template> <div id="app"> <h2>{{msg}}</h2> <input type="te ...

  6. vue的数据双向绑定和ref获取dom节点

    vue是一个MVVM的框架 业务逻辑代码即js部分是model部分, html是view部分. 当model改变的时候,view也会改变 view 改变是,model也会改变 <template ...

  7. vue2.* 双向数据绑定 Vue事件介绍 以及Vue中的ref获取dom节点 04

    <template> <div id="app"> <!-- 双向数据绑定(必须在表单里面使用) m:model v:view mvvm:model改 ...

  8. form表单验证和事件、正则表达式

    1.表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电话号码, ...

  9. 2016年11月6日--form表单验证和事件、正则表达式

    1.表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电话号码, ...

随机推荐

  1. vue中的iviewUI导出1W条列表数据每次只导出2000条的逻辑

    导出弹窗的html <template> <Modal v-model="exportModal" width=400 :closable="false ...

  2. echarts tooltip 自定义提示信息添加圆点

    tooltip自定义时,给文字前加圆点 tooltip: { formatter: '{b}<br /><span style="display:inline-block; ...

  3. html学习_表格、表单

    表格(table):是用来处理表格式数据的,不是用来布局的. table > tr(行标签)>  td(单元格标签) 1.表格注意事项: tr只能放置td标签,td里面可以放置任意元素. ...

  4. HDU 5985/nowcoder 207D - Lucky Coins - [概率题]

    题目链接:https://www.nowcoder.com/acm/contest/207/D 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5985 ...

  5. TCP协议和TCP/IP(簇)

    TCP协议(传输层) 用于应用程序之间的通信. 连接的建立是经过三次握手,断开的时候四次挥手. TCP 包头很复杂,但是主要关注五个问题,顺序问题,丢包问题,连接维护,流量控制,拥塞控制 状态位例如: ...

  6. 编译openssl和Apache报错checking for SSL_CTX_new... no

    执行export LDFLAGS=-ldl命令后重新编译

  7. ORM Active Record Data Mapper

    What's the difference between Active Record and Data Mapper? https://www.culttt.com/2014/06/18/whats ...

  8. Server:www121 Server:www120 Server:NWS_SP

    Request URL:http://www.biyao.com/minisite/bzzx Request Method:GET Status Code:200 OK Remote Address: ...

  9. [skill][http] http管道化连接

    已知http的请求响应是一对一的. 就是一个请求跟着接下来的响应便是与之配对了. 而另一种方式, 可以依靠顺序, 即发送多个http请求, 然后返回对个http响应. 严格按照顺序将他们对应起来, 称 ...

  10. cocoapod引入FLEX,debug模式正常,Release报错library not found for -lXXX

    cocoapod引入FLEX,debug模式正常,Release报错library not found for -lXXX, 因为podfile是这么写的: pod 'FLEX', '~> 2. ...