[React06]组件实例核心属性之一props

[React06]组件实例核心属性之一props

现想实现如下功能:
在这里插入图片描述

首先新建一个页面,完成符合格式的静态页面的编写。

//创建类式组件
    class Person extends React.Component{
      render(){
        return(
          <ul>
            <li>姓名: Tom</li>
            <li>性别: 女</li>
            <li>年龄: 18</li>
          </ul>
        )
      }
    }
    //渲染组件到页面
    ReactDOM.render(<Person/>,document.getElementById('test'))

实现效果:
在这里插入图片描述
因此修改代码,将属性通过props进行传递,实现效果也没有变化。

//创建类式组件
    class Person extends React.Component{
      render(){
        return(
          <ul>
            <li>姓名: {this.props.name}</li>
            <li>性别: {this.props.sex}</li>
            <li>年龄: {this.props.age}</li>
          </ul>
        )
      }
    }
    //渲染组件到页面
    ReactDOM.render(<Person name='Tom' age='18' sex=''/>,document.getElementById('test'))

在这里插入图片描述
但是东西很多时,还是希望能批量传过来,可以使用…的形式。

//创建类式组件
    class Person extends React.Component{
      render(){
        const {name,sex,age} = this.props
        return(
          <ul>
            <li>姓名: {name}</li>
            <li>性别: {sex}</li>
            <li>年龄: {age}</li>
          </ul>
        )
      }
    }
    //渲染组件到页面
    const p1 = {name:'tom',age:18,sex:'女'}
    ReactDOM.render(<Person {...p1}/>,document.getElementById('test'))

但是想给name、age以及sex加上规则,要使用propsTypes。
要先引入props-types.js,用于对组件标签属性进行限制。

<script src="../js/prop-types.js"></script>
  <script type="text/babel">
    //创建类式组件
    class Person extends React.Component{
      render(){
        const {name,sex,age} = this.props
        return(
          <ul>
            <li>姓名: {name}</li>
            <li>性别: {sex}</li>
            <li>年龄: {age+1}</li>
          </ul>
        )
      }     
    }
    //对标签属性进行类型、必要性的限制
    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//限制sex默认值为18
    }
    function speak(){
      return (console.log('我会说话'))
    }
    //渲染组件到页面
    ReactDOM.render(<Person name='Terry' speak={speak}/>,document.getElementById('test'))
    ReactDOM.render(<Person name='Tom' age={22} sex=''/>,document.getElementById('test1'))

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

注意props是只读不改的。
现想将props写法简化。

//创建类式组件
    class Person extends React.Component{
      //对标签属性进行类型、必要性的限制
      static propTypes = {
        name: PropTypes.string.isRequired,//限制name必传,且为字符串
        sex: PropTypes.string,//限制sex为字符串
        age: PropTypes.number,//限制age为数字
        speak:PropTypes.func//限制speak为函数
      }
      //指定默认的标签属性值
      static defaultProps = {
        sex:'女',//限制sex默认值为女
        age: 18//限制sex默认值为18
      }
      render(){
        const {name,sex,age} = this.props
        return(
          <ul>
            <li>姓名: {name}</li>
            <li>性别: {sex}</li>
            <li>年龄: {age+1}</li>
          </ul>
        )
      }     
    }
    
    function speak(){
      return (console.log('我会说话'))
    }
    //渲染组件到页面
    ReactDOM.render(<Person name='Terry' speak={speak}/>,document.getElementById('test'))
    ReactDOM.render(<Person name='Tom' age={22} sex=''/>,document.getElementById('test1'))
    const p1 = {name:'老刘',age:18,sex:'女'}
    ReactDOM.render(<Person {...p1}/>,document.getElementById('test2'))

之前写state时,有用到构造器,且构造器中传了props,代码如下:

constructor(props){
        super(props);
        //初始化状态
        this.state = {isHot:false,wind:'微风'}
        //解决changeWeather中的this指向问题
        this.changeState = this.changeWeather.bind(this)
      }

是否写构造器、构造器中是否接收props、是否传递给super,取决于是否希望在构造器中通过this访问props。
函数式组件使用props
在限制时,依然可以选择放在函数外

function Person(props){
      const {name,sex,age}=props
      return(
          <ul>
            <li>姓名: {name}</li>
            <li>性别: {sex}</li>
            <li>年龄: {age}</li>
          </ul>
        )
    }
    //渲染组件到页面
    ReactDOM.render(<Person name='Terry' sex='' age='18'/>,document.getElementById('test'))

实现效果:
在这里插入图片描述

学习React笔记【自用】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Destiny157

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值