Heading for the future

React中props

 

今天让我们开启新的篇章好吧,来搞一搞React,以下所有操作都是我个人的一些理解,如果有错吴还请指出,想要看更全的可以去React官网可能一下子好吧

昨天按摩没到位,导致今天身体不太行,撸码千万别苦了自己,活着最重要

我们先来搞一搞React中props的使用,React项目的基本搭建我就不做了,很简单。直接开始上内容好吧

1.和Vue一样React也使用props来进行父组件往子组件传参,基本使用还是很简单的

步骤:

1.父组件调用子组件时传入属性

2.子组件直接通过this.props.属性名   即可拿到父组件传过来的值

 

import React, { Component,Fragment} from 'react';

//React的props传参

// 父组件
class App extends Component {
  render() {
    return (
      <Fragment>
        <Child aaa="红牛"></Child>
      </Fragment>
    )
  }
}

// 子组件
class Child extends Component{
      render(){
        return (
          <div>{this.props.aaa}</div>
        )
      }
}

export default App;

(我在这里提醒一句,文章所有代码都运行在搭好的React环境中,千万别拉到本地直接扔到一个html文件里,一运行一看运行不起来,这就好比在一个没有空气的星球,试图靠空气生存一样,空气都没有,你说能活下去嘛)

运行结果:

 

2.现在基本传参可以了,那能不能传点别的过去,当然可以,要是只能传参数岂不是很鸡肋,下面我们来试试能不能传一个函数过去,当然是可以的

步骤:1.在父组件里定义一个函数

   2.调用子组件时将函数传过去

   3.子组件通过this.props.函数名()来调用函数并且执行

 

import React, { Component,Fragment} from 'react';

//React的props传参

// 父组件
class App extends Component {
  render() {
    return (
      <Fragment>
        <Child aaa="红牛" bbb={this.hanshu}></Child>
      </Fragment>
    )
  }
  hanshu(){
    return  "我是父组件传过来的函数"
}}

// 子组件
class Child extends Component{
      render(){
        return (
          <div>{this.props.aaa}{this.props.bbb()}</div>
        )
      }
}

export default App;

运行结果:

 

3.学过Vue的同学可能会知道Vue里面是可以对props传过来的值进行验证的,比如他的类型,是否为空,默认值等等,那在我们的React中有没有对props进行验证呢,答案是肯定的

  只不过React的props验证没有Vue的验证用起来方便,下面我们来看一看React中props具体是怎么验证的

  1.安装props-type

    yarn add prop-types 

  2.引入prop-types

  3.愉快的使用两个属性来进行验证  

      1.propTypes:用来验证类型和是否必传

      2.defaultProps:用来设置未传参时的默认值

   下面我们直接将代码发上来好吧

    

import React, { Component,Fragment} from 'react';
import PropTypes from 'prop-types'
//React的props传参

// 父组件
class App extends Component {
  render() {
    return (
      <Fragment>
        <Child aaa="红牛"  ccc="大红枣"></Child>
      </Fragment>
    )
  }}

// 子组件
class Child extends Component{
      render(){
        return (
          <div>{this.props.aaa}
          <hr/>
          {this.props.bbb}
          <hr/>
          {this.props.ccc}
          <hr/>
          {this.props.ddd}
          <hr/>
          </div>
        )
    }
}
//对传过来的props进行验证
//验证类型和是否必传
Child.propTypes = {
    // 传入aaa的类型必须为number(不传不会报错,仅仅是限制已传入的参数类型)
    aaa:PropTypes.number,
    //必须传入bbb
    bbb:PropTypes.isRequired,
    //必须传入ccc且类型必须为
    ccc:PropTypes.string.isRequired
}

//设置默认值
Child.defaultProps = {
    ddd:"默认值"
}

export default App;

运行结果:

      

     我先来解释解释这两个错误  1:aaa类型传入为string,期望为number

                 2.bbb需要被传入

    我们可以看到结果都显示了,但是报错了,所以我们得到一个结论,验证不通过会报错,但是实际上并不影响我们页面的正常显示

上面我们进行是讲props的验证放到了类的定义外面,放到外面感觉有点分离了,那我们能不能拿到里面来呢,当然可以了,下面我们来看看另一种写法

    利用static静态属性将验证写在类的里面

    下面直接上代码

    

import React, { Component,Fragment} from 'react';
import PropTypes from 'prop-types'
//React的props传参

// 父组件
class App extends Component {
  render() {
    return (
      <Fragment>
        <Child aaa="红牛"  ccc="大红枣"></Child>
      </Fragment>
    )
  }}

// 子组件
class Child extends Component{
      render(){
        return (
          <div>{this.props.aaa}
          <hr/>
          {this.props.bbb}
          <hr/>
          {this.props.ccc}
          <hr/>
          {this.props.ddd}
          <hr/>
          </div>
        )
    }
    static propTypes = {
          // 传入aaa的类型必须为number(不传不会报错,仅仅是限制已传入的参数类型)
        aaa:PropTypes.number,
         //必须传入bbb
        bbb:PropTypes.string.isRequired,
        //必须传入ccc且类型必须为
        ccc:PropTypes.string.isRequired
    }
    static defaultProps = {
      ddd:"默认值"
    }
}

export default App;

 

 

好了,暂时关于React中的props我就写这些,大家有需要的可以参考参考,如有错误,请以官方文档为准,溜了溜了,用膳去

 

posted @ 2018-11-18 18:57  一只菜鸟攻城狮啊  阅读(6219)  评论(5编辑  收藏  举报