react的三大属性
react的三大属性 state props refs
- props 来自外部属性
- states 来自内部状态
- refs 用于表示组件内某个元素
state基础(最重要的属性)
- state是组件对象最重要的属性,其值是对象,即可以包含多个数据
- 可以通过更新组件的state来更新对应的页面的显示(重新进行组件渲染)
state 操作
初始化状态
constructor(props){
super(props)
this.state = { //this是一个组件对象
stateProp1: value1,
stateProp2: value2
}
}
读取某个状态值
this.state.statePropertyName
更新状态,组件界面更新
this.setState({
stateProp1: value1,
stateProp2: value2
})
state属性示例–监听点击事件,然后状态改变
定义组件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="test"></div> <script src="https://cdn.bootcss.com/react/16.4.0/umd/react.development.js"></script>
<script src="https://cdn.bootcss.com/react-dom/16.4.0/umd/react-dom.development.js"></script>
<script src="https://cdn.bootcss.com/babel-standalone/6.26.0/babel.min.js"></script> <script type="text/babel"> class Myname extends React.Component {
constructor (props) {
//调用父类的构造函数
super(props)
//1、初始化状态——固定写法
this.state = {
isMyname: true
}
//[注意]将新增的方法中的this强制绑定为组件对象_bind()方法产生一个与handleClick()一样的方法
this.change = this.change.bind(this) }
//新增自定义方法:内部的this默认不是组件对象,而是undefined
change () {
//3、更新状态,需要让this指向组件对象
this.setState({
isMyname: !this.state.isMyname
})
}
//重写组件类方法
render () { const text = this.state.isMyname ? '我是ImagineCode' : '哈哈哈'
return <h2 onClick={this.change}>{text}</h2>
}
}
ReactDOM.render(<Myname />, document.getElementById('test')) </script>
</body>
</html>
props 属性
作用:复用
案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="test1"></div>
<div id="test2"></div> <script src="https://cdn.bootcss.com/react/16.4.0/umd/react.development.js"></script>
<script src="https://cdn.bootcss.com/react-dom/16.4.0/umd/react-dom.development.js"></script>
<script src="https://cdn.bootcss.com/babel-standalone/6.26.0/babel.min.js"></script>
<script src="../js/prop-types.js"></script> <script type="text/babel"> // 1、定义组件:方式1
function Person(props) {
return (
<ul>
<li>name:{props.name}</li>
<li>age:{props.age}</li>
<li>sex:{props.sex}</li>
</ul>
)
}
//方式2:使用类方式定义组件(运行时请将其中一个方式注释)
class Person extends React.Component {
render() {
return (
<ul>
<li>name:{this.props.name}</li>
<li>age:{this.props.age}</li>
<li>sex:{this.props.sex}</li>
</ul>
)
}
}
//指定默认值
Person.defaultProps = {
name:'imaginecode',
age: 17,
sex:'woman'
}
//指定属性值的类型和必要性--使用prop-types.js库
Person.propTypes = {
name:PropTypes.string.isRequired,
age:PropTypes.number.isRequired,
} // 2、渲染组件标签
const p1 = {
name:'imaginecode',
age: 19,
sex:'man'
} ReactDOM.render(<Person name={p1.name} age={p1.age} sex={p1.sex} />,document.getElementById('test1'));
const p2 = {
name:'imaginecode2'
} ReactDOM.render(<Person name={p2.name}/>,document.getElementById('test2'));
</script>
</body>
</html>
为组件指定默认属性值,组件属性defaultProps:
Person.defaultProps = {name:''}
对props中的属性值进行类型限制和必要性限制,组件属性propTypes:
Person.propTypes = {
name:PropTypes.string.isRequired,
age:PropTypes.number.isRequired
}
refs 属性
(1)ref用于标识组件内部某个元素
(2)refs 是标识集合
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="text1"></div>
<div id="text2"></div> <script src="https://cdn.bootcss.com/react/16.4.0/umd/react.development.js"></script>
<script src="https://cdn.bootcss.com/react-dom/16.4.0/umd/react-dom.development.js"></script>
<script src="https://cdn.bootcss.com/babel-standalone/6.26.0/babel.min.js"></script>
<script src="../js/prop-types.js"></script> <script type="text/babel">
//1、先定义组件
class InputComp extends React.Component {
constructor(props) {
super(props)
//先对自定义函数进行bind操作
this.showInput = this.showInput.bind(this);
this.handleBlur = this.handleBlur.bind(this); }
showInput(event) {
console.log(this);
alert(this.inputVal.value);
}
handleBlur(event) {//利用所有的事件均有一个event属性
alert(event.target.value);
}
render() {
return(
//this.inputVal=input 将当前input绑定到组件对象上。input代表当前这个input元素
<div>
<input type="text" ref={input => this.inputVal=input}/>
<button onClick={this.showInput}>点击获取值</button>
<input type="text" placeholder="失去焦点提示内容" onBlur={this.handleBlur}/>
</div>
)
}
}
//2、渲染组件标签
ReactDOM.render(<InputComp />,document.getElementById('text1'));
</script>
</body>
</html>
react的三大属性的更多相关文章
- React组件三大属性之 refs
React组件三大属性之 refs refs属性 1) 组件内的标签都可以定义ref属性来标识自己 a. <input type="text" ref={input => ...
- React组件三大属性之 props
React组件三大属性之 props 理解1) 每个组件对象都会有props(properties的简写)属性2) 组件标签的所有属性都保存在props中 作用1) 通过标签属性从组件外向组件内传递变 ...
- React组件三大属性之state
React组件三大属性之state 组件被称为"状态机", 页面的显示是根据组件的state属性的数据来显示 理解1) state是组件对象最重要的属性, 值是对象(可以包含多个数 ...
- React 三大属性state,props,refs以及组件嵌套的应用
React 三大属性state,props,refs以及组件嵌套的应用 该项目实现了一个简单的表单输入添加列表的内容 代码如下 <!DOCTYPE html> <html> & ...
- 组件的三大属性state,props,refs与事件处理
组件的三大属性state state是组件对象最重要的属性, 值是对象(可以包含多个数据),组件被称为"状态机", 通过更新组件的state来更新对应的页面显示(重新渲染组件) 初 ...
- 手把手教你使用Vue/React/Angular三大框架开发Pagination分页组件
DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师.官方网站:devui.designNg组件库:ng-devui(欢迎S ...
- JS中Array数组的三大属性用法
原文:JS中Array数组的三大属性用法 Array数组主要有3大属性,它们分别是length属性.prototype属性和constructor属性. JS操作Array数组的方法及属性 本文总结了 ...
- React组件的属性
组件的三大属性 state props refs 写组件的要求: 1>组件必须大写 2>组件必须只有一个根元素 state是组件的重要对象 值可以是对象 组件被称之为 状态机 通过跟新组件 ...
- React Native声明属性和属性确认
属性声明 因为用React Native创建的自定义组件可以复用, 我们开发过程中可能一个项目组有多个人同时开发,其他同事可能会用到我们自定义的组件, 但是他们使用的时候很容易忘记使用某些属性,这时候 ...
随机推荐
- 分布式锁为什么要选择Zookeeper而不是Redis?
在分布式的应用中,为了防止单点故障,保障高可用,通常会采用主从结构,当主节点挂掉后,从节点可以代替主节点提供服务. Redis通过复制 + sentinel哨兵来实现主从模式. Zookeeper通过 ...
- mysql注入getshell
0x00 利用条件 root权限 secure_file_priv=为空或者在网站根目录下(网站根目录为d:\www,secure_file_priv=d:\也可以) 知道绝对路径 gpc关闭,这个应 ...
- 在 Linux 中,最直观、最可见的部分就是 文件系统(file system)
在 Linux 中,最直观.最可见的部分就是 文件系统(file system).下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想.这些思想中有一些来 ...
- Docker Swarm(四)Volume 数据(挂载)持久化
前言 为了获得最佳的性能和可移植性,应该避免将重要数据直接写入容器的可写层,而应使用数据卷或绑定挂载. 可以为集群中的服务创建两种类型的挂载,数据卷挂载(volume mounts)或绑定挂载(bin ...
- 回车与换行的区别:CRLF、CR、LF
引言 以下是 MySQL 8 导出数据的窗口,导出数据时需要选择记录分隔符,这就需要你明白 CRLF.CR 和 LF 分别代表什么,有何区别,否则可能导出数据会出现莫名其米的问题. 名词解释 CR:C ...
- Android开发Activity全局切换的动画效果
切换动画 slide_left_in.xml 从左边进 --> 退出的时候使用 <?xml version="1.0" encoding="utf-8&quo ...
- C# Asp.Net 实现PPT/PDF转成图片(不依赖office)
最近公司有个需求,将PPT课件转成图片列表,然后在前端展示成轮播图,于是一开始通过Microsoft.Office.Interop.PowerPoint包实现了这个需求具体代码如下: /// < ...
- 如何屏蔽 iOS 软件自动更新,去除更新通知和标记
适用于 iOS.iPadOS 和 watchOS,即 iPhone.iPad 和 Apple Watch 通用. 请访问原文链接:https://sysin.org/article/Disable-i ...
- Spring Boot - 自定义 Banner 图案
我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. 前言 ...
- Linux 文件不能被root修改与编辑原因
近段时间公司的一台服务器被恶意添加了一些定时器任务到crond的配置文件"/var/spool/cron/root"里,本想着只要简单使用crontab -e命令把该恶意的任务去除 ...