react的三大属性——props

一、对props的理解

  1. 每个组件对象都会有props(properties的简写)属性

  1. 组件标签的所有属性都保存在props中

二、props的作用

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

  1. 注意: 组件内部不要修改props数据

三、具体用法

首先每个组件定义的时候都要继承React.Component,所以每个组件实例自身都会有props属性,是一个对象,react会自动的将组件标签中的所有属性自动的归纳于组件实例的props属性中作为其属性的形式存在

ReactDOM.render(<Person name="jerry" age={19}  sex="男"/>,document.getElementById('test1'))
//注意:在给组件标签的属性赋值的时候,如果值不是字符串类型,需要用{}包裹,否则会自动的将其识别为字符串类型

对于多个数据,react提供了{...obj}的用法

const p = {name:'老刘',age:18,sex:'女'}
ReactDOM.render(<Person {...p}/>,document.getElementById('test3'))

四、对标签属性进行限制——propTypes

  • 在react中给传入的属性加规则时,需要使用propTypes来限制,react底层会在创建组件实例的时候寻找propTypes,看是否有限制;

  • 对于下每个属性限制的类型要用到React.PropTyres来限制

  • 简单来说就是,propTypes用来标志这个组件是否有属性类型限制,具体有什么限制要用React.PropTypes来标志

注意:React.PropTypes这个用来标记数据类型的时候String类型用React.PropTypes.string,会变成小写

注意:React.PropTypes这个在react的15.xxx的版本的时候一直在维护,但是在16版本之后就被弃用了,因为这个直接挂载在React身上会导致React过于庞大,并且也不是每个组件都需要进行类型限制,所以16版本后就不再在React上了,需要另行引入prop-types包,用于对组件的标签属性进行限制

补充:引入react.development.js,全局会多了一个React对象;引入react-dom.development.js,全局会多了一个ReactDOM的对象;引入prop-types.js,全局对多了一个PropTypes对象

  1. 对传入的标签属性进行数据类型的限制

Person.propTypes = {
    name:PropTypes.string//限制Person组件实例的name属性为字符串
    sex:PropTypes.string,//限制sex为字符串
    age:PropTypes.number,//限制age为数值
    speak:PropTypes.func,//限制speak为函数
//注意每个类型的写法,全部变成小写字母开头,并且函数要写成func
}
  1. 对传入的标签属性进行默认值的限制,如果不传递,将给其一个默认值——defaultProps

//指定默认标签属性值
Person.defaultProps = {
    sex:'男',//sex默认值为男
    age:18 //age默认值为18
}
  1. 对传入的标签属性进行必要性的限制,特定标签属性必须要传值——isRequired关键字

Person.propTypes = {
    name:PropTypes.string.isRequired, //限制name必传,且为字符串
}
  1. props是只读的不允许修改

五、props的简写方式,使用类中的state关键字,将其定义成类原型的属性

//对标签属性进行类型、必要性的限制
static propTypes = {
    name:PropTypes.string.isRequired, //限制name必传,且为字符串
    sex:PropTypes.string,//限制sex为字符串
    age:PropTypes.number,//限制age为数值
}

//指定默认标签属性值
static defaultProps = {
    sex:'男',//sex默认值为男
    age:18 //age默认值为18
}

六、类式组件中的构造器与props

  1. 类中写构造器传与不传props的区别

在React组件挂载之前,会调用他的构造函数,在为React.Component子类实现构造函数时,应在其他语句之前调用super(props)否则,this.props在构造和函数中可能会出现未定义的bug

构造器是否接收props,是否传递给super,取决于:是否希望在构造器中通过this访问props

  1. 类中构造器的作用

通常在React中,构造函数仅用于以下两种情况:

  1. 通过给this.state赋值对象来初始化内部state

  1. 为事件处理函数绑定实例

//在构造函数中解决事件回调this指向问题
this.changeWeather = this.changeWeather.bind(this)

在constructor()函数中不要调用setState()方法。如果你的组件需要使用内部state,请直接在构造函数中为this.state赋值初始state

总结:类中的构造器能省略就省略

七、函数式组件使用props

//创建组件
function Person (props){
    const {name,age,sex} = props
    return (
            <ul>
                <li>姓名:{name}</li>
                <li>性别:{sex}</li>
                <li>年龄:{age}</li>
            </ul>
        )
}
Person.propTypes = {
    name:PropTypes.string.isRequired, //限制name必传,且为字符串
    sex:PropTypes.string,//限制sex为字符串
    age:PropTypes.number,//限制age为数值
}

//指定默认标签属性值
Person.defaultProps = {
    sex:'男',//sex默认值为男
    age:18 //age默认值为18
}
//渲染组件到页面
ReactDOM.render(<Person name="jerry"/>,document.getElementById('test1'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值