一、前言:

  属性1:state

  属性2:props

  属性3:ref 与事件处理

二、主要内容:

属性1:state

  1,认识:

    1) state 是组件对象中最重要的属性,值是一个对象(可以包含多个数组,有点像vue中的data属性)

      2)组件被称为“状态机”,通过更新组件的state来更新对应的页面显示

  2,操作state通常要经历三个状态

) 初始化状态:
constructor (props) {
super(props)
this.state = {
stateProp1 : value1,
stateProp2 : value2
}
} ) 读取某个状态值
this.state.statePropertyName ) 更新状态---->组件界面更新
this.setState({
stateProp1 : value1,
stateProp2 : value2
})

  3,案例演示

    

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="obj"></div>
<script type="text/javascript" src="./js/react.development.js"></script>
<script type="text/javascript" src="./js/react-dom.development.js"></script>
<script type="text/javascript" src="./js/babel.min.js"></script>
<script type="text/babel"> //自定义Like组件
class Like extends React.Component{
//定义初始化状态
constructor(props){
super(props) //交给父类去执行
this.state={ //定义state属性,并添加一个isLikeMe数据
isLikeMe:false } //强制绑定,让函数handleClick等于当前组件
this.handleClick= this.handleClick.bind(this) }
//定义操作函数,注意函数里面的this是undefined handleClick(){
//更新state状态
const isLikeMe = !this.state.isLikeMe
this.setState({
isLikeMe
}) } render(){
//读取状态
const {isLikeMe} = this.state
return <h1 onClick={this.handleClick}>{isLikeMe ? '我喜欢你':'你喜欢我'}</h1> } } //渲染
ReactDOM.render(<Like />, document.getElementById('obj'))
</script>
</body>
</html>

   4,注意点:

     1)更新 state 状态定义的函数里面的 this 不是指向当前对象的,需要用 bind 强制绑定this为当前组件

     2)强制绑定 this : this.handleClick = this.handleClick.bind(this)

属性1:props

  1,理解:

    1) 每个组件对象都会有 props 属性

    2)组件标签中所以的属性都保存在 props 中

  2,作用:

   1)通过标签属性从组件外向组件内传递变化的数据

      2)组件内部不需要修改 props 数据

  3,props 的操作:

//1)内部读取某个属性值

this.props.propertyName

//2) 对props中的属性值进行类型限制和必要性限制

方法一:新版本中已经被弃用
Person组件名:
Person.propTypes={ name: React.PropTypes.string.isRequired,
age:React.PropTypes.number.isRequired
} 方法二:
需要用到prop-types.js文件
Person.propTypes={
name:PropTypes.string.isRequired } //3)扩展属性:对象的所有属性通过props传递
<Person {...person} /> //默认传递了所有属性 //4)默认属性值
Person.defaultProps = { name:"Mary" } //5)组件类的构造函数,
constructor(props){ super(props)
console.log(props)//里面存放所有属性 }

  4,举例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="ul"></div>
<script type="text/javascript" src="./js/react.development.js"></script>
<script type="text/javascript" src="./js/react-dom.development.js"></script>
<script type="text/javascript" src="./js/prop-types.js"></script>
<script type="text/javascript" src="./js/babel.min.js"></script>
<script type="text/babel"> function List(props){ return (
<ul>
<li>姓名:{props.name}</li>
<li>年龄: {props.age}</li>
<li>性别:{props.sex}</li>
</ul> ) } const person ={
name:'xxm',
age:,
sex:'女'
} //设置默认属性
List.defaultProps={ age:,
sex:"男" } //对类型进行限制和必要性限制
List.propTypes={
name:PropTypes.string.isRequired }
//使用扩展属性
ReactDOM.render(<List {...person}/>, document.getElementById('ul'))
</script>
</body>
</html>  

属性3:ref与事件处理

  1,理解:

    1)组件内的标签都可以定义 ref 属性来标识自己

     2)在组件中可以通过 this.msglnput 来的到真实的 DOM 元素

     3)作用:通过 ref 获取组件特定的标签对象,进行读取相关数据

//ref使用方式一:

<input type="text" ref="content"/>

//ref使用方式二:
<input type="text" ref={input=>this.input=input}/> //input=>this.input=input 的含义是将当前的input 赋值给组件里面的input

   2,事件处理  

     1)通过onXxx属性指定组件的事件处理函数

  2)React中的事件是通过事件委托方式处理的(委托给组件最外层的元素)

  3)通过event.target可以得到发生事件的DOM元素

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="obj1"></div>
<script type="text/javascript" src="./js/react.development.js"></script>
<script type="text/javascript" src="./js/react-dom.development.js"></script>
<script type="text/javascript" src="./js/prop-types.js"></script>
<script type="text/javascript" src="./js/babel.min.js"></script>
<script type="text/babel"> class MyComponent extends React.Component{ constructor(props){
super(props)
//给处理函数强制绑定this
this.handleClick=this.handleClick.bind(this)
this.handleBlur = this.handleBlur.bind(this) } handleClick(){ alert(this.input.value) } handleBlur(event){ alert(event.target.value)
} render(){ return (
<div>
<input type="text" ref="content"/>
<input type="text" ref={input=>this.input=input}/>
<button onClick={this.handleClick}>点击按钮</button>
<input type="text" placeholder="请输入数据" onBlur={this.handleBlur} />
</div>
) } } ReactDOM.render(<MyComponent />, document.getElementById("obj1"))
</script>
</body>
</html>

三,总结

  React中props和state都是存储数据的区别如下

    1)state: 组件自身内部可变化的数据

    2)props: 从组件外部向组件内部传递数据,组件内部只读取不修改

  注意点:

    1)组件内置的方法中的this为组件对象,z

    2) 在组件类中自定义的处理函数方法的this默认为null 所以需要强制绑定

React中的三大属性的更多相关文章

  1. react 中的路由 属性exact

    https://www.cnblogs.com/nailc/p/8718137.html(copy)

  2. React 中的key值

    在react中必须要有key值,key不是用来提升react的性能的,react中的key属性,它是一个特殊的属性,它是出现不是给开发者用的(例如你为一个组件设置key之后不能获取组件的这个key p ...

  3. 【react】---react中key值的作用

    一.React中key值得作用 react中的key属性,它是一个特殊的属性,它是出现不是给开发者用的,而是给React自己使用,有了key属性后,就可以与组件建立了一种对应关系,简单说,react利 ...

  4. react的三大属性

    react的三大属性 state props  refs props 来自外部属性 states 来自内部状态 refs 用于表示组件内某个元素 state基础(最重要的属性) state是组件对象最 ...

  5. React组件三大属性之 refs

    React组件三大属性之 refs refs属性 1) 组件内的标签都可以定义ref属性来标识自己 a. <input type="text" ref={input => ...

  6. React组件三大属性之 props

    React组件三大属性之 props 理解1) 每个组件对象都会有props(properties的简写)属性2) 组件标签的所有属性都保存在props中 作用1) 通过标签属性从组件外向组件内传递变 ...

  7. React组件三大属性之state

    React组件三大属性之state 组件被称为"状态机", 页面的显示是根据组件的state属性的数据来显示 理解1) state是组件对象最重要的属性, 值是对象(可以包含多个数 ...

  8. React 三大属性state,props,refs以及组件嵌套的应用

    React 三大属性state,props,refs以及组件嵌套的应用 该项目实现了一个简单的表单输入添加列表的内容 代码如下 <!DOCTYPE html> <html> & ...

  9. JS中Array数组的三大属性用法

    原文:JS中Array数组的三大属性用法 Array数组主要有3大属性,它们分别是length属性.prototype属性和constructor属性. JS操作Array数组的方法及属性 本文总结了 ...

随机推荐

  1. FCC---Create Visual Direction by Fading an Element from Left to Right---一个带好看背景色的圆形图案,从左到右移动,透明度opacity渐变为0.1,背景色渐渐消失的效果

    For this challenge, you'll change the opacity of an animated element so it gradually fades as it rea ...

  2. centos7 apache后台转nginx后台

    背景 一开始买完服务器装的是用apache搭的后台, 现在想使用nginx, 希望对你有参考作用 查看系统版本信息 lsb_release -a 我的版本信息是 首先关闭apache-tomcat服务 ...

  3. SAP系统玩阴的?

    SAP系统玩阴的? 近日和项目上的ABAP开发顾问一起弄一个自开发的报表.其中某个栏位的取值需要从批次主数据里抓取到供应商代码,然后根据供应商代码取到供应商名称等.为此笔者需要备功能说明书.在说明书里 ...

  4. C# Dictionary增加的方法

    1.简单的函数,实现Dictionary如果有就替换,没有就增加的功能. /// <summary>        /// Dictionary增加的方法        /// </ ...

  5. iOS多线程比较

    .iOS的三种多线程技术 .NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) .以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 ØNS ...

  6. Linux—主机扫描工具(Nmap)

    Nmap包含五项基本功能: 主机探测 (Host Discovery) 端口扫描 (Port Scanning) 版本检测 (Version Detection) 操作系统侦测 (Operating ...

  7. postman---postman自动发博客

    前面写了一篇如何通过Cookies值去登录博客园,今天我们来通过登录博客园之后,我们进行通过Postman自动写博客 自动写博客 1.打开Postman.填写博客园对应的Cookies: 2.抓取编写 ...

  8. IAR调试查看程序时间

    在无仿真器情况下设置: 调试仿真,点击view菜单下registers 软件仿真时计算两断点CYCLECOUNTER(在CPU registers中)的差值,乘以指令周期(MCLK)便是执行时间

  9. 【洛谷P2494】 [SDOI2011]保密(分数规划+最小割)

    洛谷 题意: 题意好绕好绕...不想写了. 思路: 首先类似于分数规划做法,二分答案得到到每个点的最小危险度. 然后就是在一个二分图中,两边撤掉最少的点(相应代价为上面算出的危险度)及相应边,使得中间 ...

  10. Centos 7+KVM(Windows Server 2008 r2 )

    KVM虚拟机 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调度 ...