React--props深入

1.children属性

表示组件标签的子节点。当组件标签有子节点时,props就会有该属性。子节点可以传入各种类型的数据(文本、React元素、组件、甚至是函数)

const Hello = props=>{
    return(
      <div>
        组件的子节点:{props.children}
      </div>
    )
 }
ReactDOM.render(<Hello>我是子节点</Hello>,//调用的是父组件

document.getElementById('root'))
const Test = ()=>{
  return(
    <button>我是Test组件</button>
  )
}

const Hello = props=>{
    return(
      <div>
        组件的子节点:{props.children}
      </div>
    )
 }
ReactDOM.render(<Hello><Test/></Hello>,//调用的是父组件

document.getElementById('root'))

const Hello = props=>{
  console.log(props)
  props.children()
    return(
      <div>
        组件的子节点:{props.children}
      </div>
    )
 }
ReactDOM.render(<Hello>{()=>console.log('这是一个函数子节点')}</Hello>,//调用的是父组件

document.getElementById('root'))

 

 2.1props校验

  • 对于组件来说,props是外来的,无法保证组件使用者传入什么格式地数据
  • 如果传入的数据格式不对,可能会导致组件内部报错、
  • 关键问题:组件的使用者不知道明确的错误原因

//小明创建的组件
const App =props=>{
  const arr =props.colors
  const lis = arr.map((item,index)=>
  <li key={index}>{item}</li>)
  return(
    <ul>{lis}</ul>
  )
}

//小红创建组件App
<App colors={19}/>

2.2什么是props检验

  • props校验:允许在创建组件的时候,就指定props的类型、格式等
  • 作用:捕获使用组件时因为props导致的错误,给出明确的错误提示,增加组件的健壮性

2.3props校验使用步骤

  • 安装包npm i prop-types
  • 导入:prop-types包
  • 使用组件名.propType={}来给组件的props添加校验规则
//小明创建的组件
const App =props=>{
  const arr =props.colors
  const lis = arr.map((item,index)=>
  <li key={index}>{item}</li>)
  return(
    <ul>{lis}</ul>
  )
}

App.PropTypes={
  //约定colors属性为array类型
  //如果类型不对,则报出明确错误,便于分析错误
  colors:PropTypes.array
}



ReactDOM.render(<App colors={19}/>,//调用的是父组件

document.getElementById('root'))

2.3props约束规则

  • 常见类型:array、bool、func、number、object、string
  • React元素类型:element
  • 必填项:isRequid
  • 特定结构的对象:shape({})
//小明创建的组件
const App =props=>{
  const arr =props.colors
  const lis = arr.map((item,index)=>
  <li key={index}>{item}</li>)
  return(
    <ul>{lis}</ul>
  )
}

App.PropTypes={
  //约定colors属性为array类型
  //如果类型不对,则报出明确错误,便于分析错误
  colors:PropTypes.array,
  a:PropTypes.number,
  fn:PropTypes.func.isRequired,//设置函数为必填项
  tag:PropTypes.element,
  filter:PropTypes.shape({
    area:PropTypes.string,
    price:PropTypes.number
  })

}



ReactDOM.render(<App colors={['red','green','blue']}/>,//调用的是父组件

document.getElementById('root'))

报错:

 3.props的默认值

作用:给props设置默认值,在未传入props时生效

const App =props=>{
  const arr =props.colors
  const lis = arr.map((item,index)=>
  <li key={index}>{item}</li>)
  return(
    <ul>{lis}</ul>
  )
}

App.defaultProps={
  colors:['red','green','blue']
}

ReactDOM.render(<App/>,//调用的是父组件

document.getElementById('root'))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值