当前位置:   article > 正文

react props深入使用:children属性、props校验、props的默认值_react props children

react props children

目录

一 children属性

1 当组件标签有子节点时,props就会有children属性,children属性的值就是子节点的内容

 2 children属性与普通的props一样,值可以是任意值(文本、react元素、组件、函数..)

 二 props校验

1 props校验的基本使用

 2 props常用校验规则

三 props的默认值


一 children属性

1 当组件标签有子节点时,props就会有children属性,children属性的值就是子节点的内容

  1. import React from "react";
  2. import ReactDOM from "react-dom";
  3. class App extends React.Component {
  4. render() {
  5. return (
  6. <div>
  7. <h1> 123</h1>
  8. {this.props.children}
  9. </div>
  10. )
  11. }
  12. }
  13. ReactDOM.render(<App>子节点</App>, document.getElementById("root"));

效果

 

 相当于这样

 2 children属性与普通的props一样,值可以是任意值(文本、react元素、组件、函数..)

 JXL作为子节点

  1. import React from "react";
  2. import ReactDOM from "react-dom";
  3. class App extends React.Component {
  4. render() {
  5. return (
  6. <div>
  7. <h1> 123</h1>
  8. {this.props.children}
  9. </div>
  10. )
  11. }
  12. }
  13. //JXL作为子节点
  14. ReactDOM.render(<App><p>我是子节点:p标签</p></App>, document.getElementById("root"));

子节点也可以是一个组件

  1. import React from "react";
  2. import ReactDOM from "react-dom";
  3. class App extends React.Component {
  4. render() {
  5. return (
  6. <div>
  7. <h1> 123</h1>
  8. {this.props.children}
  9. </div>
  10. )
  11. }
  12. }
  13. class Test extends React.Component {
  14. render() {
  15. return (
  16. <button>我是button</button>
  17. )
  18. }
  19. }
  20. //子节点也可以是一个组件
  21. ReactDOM.render(<App><Test/></App>, document.getElementById("root"));

效果

 

 

子节点也可以是一个函数
  1. import React from "react";
  2. import ReactDOM from "react-dom";
  3. class App extends React.Component {
  4. render() {
  5. this.props.children()
  6. return (
  7. <div>
  8. <h1> 123</h1>
  9. </div>
  10. )
  11. }
  12. }
  13. //子节点也可以是一个函数
  14. ReactDOM.render(<App>{()=>alert("这是一个函数子节点")}</App>, document.getElementById("root"));

效果

 二 props校验

1 props校验的基本使用

问题: 组件的创建者和使用者不是同一个人,如果传入的数据格式不对, 可能会导致组件内部报错,组件的使用者不知道明确的错误原因

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

使用步骤:
1 安装包:npm i prop-types

2 导入prop-types包
3 使用组件名.propType={} 添加校验规则

  1. import React from "react";
  2. import ReactDOM from "react-dom";
  3. // 2 导入prop-types包
  4. import PropTypes from "prop-types"
  5. class App extends React.Component {
  6. render() {
  7. const arr = this.props.colors
  8. const list=arr.map(
  9. (item,index)=><li key={index}>{item}</li>
  10. )
  11. return (
  12. <ul>
  13. {list}
  14. </ul>
  15. )
  16. }
  17. }
  18. //3 使用组件名.propType={} 添加校验规则
  19. App.propTypes={
  20. //约束组件的colors为数组类型
  21. colors:PropTypes.array
  22. }
  23. //此处传了一个不符合规范的类型
  24. ReactDOM.render(<App colors={19}/>, document.getElementById("root"));
  25. // ReactDOM.render(<App colors={['red','yellow']}/>, document.getElementById("root"));

控制台有明确的错误原因

 修改代码改成正确的类型

  1. //此处传了一个不符合规范的类型
  2. //ReactDOM.render(<App colors={19}/>, document.getElementById("root"));
  3. ReactDOM.render(<App colors={['red','yellow']}/>, document.getElementById("root"));

 2 props常用校验规则


1 常见类型:array、bool、func、number、object、string
2 react元素类型:element
3 必填项 isRequired → PropTypes.array.isRequired
4 特定结构的对象: shape({})
 

  1. // 使用组件名.propType={} 添加校验规则
  2. App.propTypes={
  3. //常见类型:array、bool、func、number、object、string
  4. a:PropTypes.number,
  5. //函数类型,且是必填项
  6. fn:PropTypes.func.isRequired,
  7. //tag属性是react的元素(element)
  8. tag:PropTypes.element,
  9. //shape:特定的结构 area是string类型,price是数字类型
  10. filter:PropTypes.shape({
  11. area:PropTypes.string,
  12. price:PropTypes.number
  13. })
  14. }
  15. ReactDOM.render(<App fn={()=>{}}/>, document.getElementById("root"));

三 props的默认值

格式:  组件.defaultProps={}

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

  1. import React from "react";
  2. import ReactDOM from "react-dom";
  3. class App extends React.Component {
  4. render() {
  5. return(
  6. <div>
  7. <h1>值:{this.props.pageSize}</h1>
  8. </div>
  9. )
  10. }
  11. }
  12. //添加props默认值
  13. App.defaultProps={
  14. pageSize:10
  15. }
  16. ReactDOM.render(<App/>, document.getElementById("root"));

预览

 

 传入props,默认值不再生效

ReactDOM.render(<App pageSize={20}/>, document.getElementById("root"));

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/297608
推荐阅读
相关标签
  

闽ICP备14008679号