组件实例三大属性

本文详细介绍了React组件的三大属性:state、props和refs。state作为数据驱动视图的核心,用于实现响应式更新;props是组件接收的外部数据,只读且可限制类型;refs则用于获取DOM元素,实现对元素的直接操作。文章通过实例展示了如何使用这三大属性,并讲解了它们的工作原理和最佳实践。
摘要由CSDN通过智能技术生成

目录

1-组件实例三大属性

1-1state 状态

1-1-1 state状态只能通过特定的方法进行修改

1-2 props

1-2-1 props的基本使用。

 1-2-2 对props进行限制

1-3 refs

1-3-1 字符串形式的ref(不推荐,但可能会有人使用,了解即可)

1-3-2 回调函数形式的ref

1-3-3 创建ref容器


1-组件实例三大属性

1-1state 状态

state状态是react中的改变dom渲染的核心,react中的数据驱动视图,说的就是state状态,当state状态的值发生变化时,页面的渲染也会随之变化,所以state又称之为响应式数据

constructor(prop){
    super(prop);
      this.state = {
      name:'小明'
  }
 console.log(this);
}

 

1-1-1 state状态只能通过特定的方法进行修改

state状态存在于类的原型上,继承自React.Componentstate中的值可以是任何类型,state的值修改有一定的要求,首先,不可直接对state的值进行修改,想要修改state的值需要使用setState函数修改state的值,当通过setStatestate的值进行修改之后,会重新调用render函数,对虚拟dom进行重新渲染,然后对比虚拟dom与真实dom的区别,进行页面的重新渲染。

render() {
    return(
        <div>
            <h1>{this.state.name}</h1>
                <button onClick={this.changeName}>更改name</button>
        </div>
    )
    
}
changeName = (e)=>{
    this.state = {name:'小白'}
    console.log(this);
}

我们可以很清晰的看到,直接通过修改state的值可以修改,但是页面并没有进行响应式的改变,这是因为想要让页面进行响应式的改变,state更改想要变成响应式需要用特定的方法setState。

changeName = (e)=>{
    this.setState({name:'小白'})
    console.log(this);
}

 当我更改为useState后,state的状态就变成了响应式,更改时会让页面重新渲染。

1-2 props

1-2-1 props的基本使用。

在组件标签中可以直接写一些参数,类似于。

<Person name="jerry" age={19}  sex="男"/>

这种写入的参数,可以在组件内接受到,在类组件输出this时,实例对象中会有一个props对象,其中存入的就是传入的数据

 可以通过解构赋值的形式,拿到传入的props的值。

const {name,age,sex} = this.props

注意,此值为只读属性,不可更改。

console.log(name); // jerry
name = 'tom'; // 报错
console.log(name);

由于函数式组件没有this,所以函数式组件中的props的位置变为形参。

function Person (props){
	console.log(props);
}

 1-2-2 对props进行限制

首先导入prop-types的库,然后使用组件名.propTypes对props进行过限制。

import PropTypes from 'prop-types';
//对标签属性进行类型、必要性的限制
Person.propTypes = {
	name:PropTypes.string.isRequired, //限制name必传,且为字符串
	sex:PropTypes.string,//限制sex为字符串
	age:PropTypes.number,//限制age为数值
	speak:PropTypes.func,//限制speak为函数
}
//指定默认标签属性值
Person.defaultProps = {
	sex:'男',//sex默认值为男
	age:18 //age默认值为18
}

1-3 refs

ref是react中获取到当前dom元素的方法,类似与jquery中的$(' '),返回的是元素本身。

1-3-1 字符串形式的ref(不推荐,但可能会有人使用,了解即可)

当标签内添加了ref='字符串'时,在实例对象的this中,会出现一个refs的属性,其中的key为添加的字符串,value为添加的元素本身,可通过原生操作dom的方法,获取元素上的某些属性。

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

const {input1} = this.refs
alert(input1.value)

1-3-2 回调函数形式的ref

可以看出此种形式的ref不会存在于refs上,而是存在与实例对象的属性上,因为是通过回调函数操作的,元素本身会作为形参c传入到函数中,所以在实例对象的属性上可以访问到该元素。

setInfo = (c)=>{
	this.input1 = c;
}
<input ref={this.setInfo} type="text"/>

1-3-3 创建ref容器

通过react自带的api createRef可以创建一个ref的容器,一个容器只能绑定一个ref

myRef = React.createRef()

 使用时只需要在标签中写入ref = 容器名即可

<input ref={this.myRef} type="text"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值