React组件进阶之children属性,props校验与默认值以及静态属性static

这篇具有很好参考价值的文章主要介绍了React组件进阶之children属性,props校验与默认值以及静态属性static。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、children属性

  • children 属性:表示该组件的子节点,只要组件有子节点,props就有该属性
  • children 属性与普通的 props 一样,值可以是任意值(文本、React元素、组件,甚至是函数)

核心代码

import React from 'react'

import ReactDOM from 'react-dom/client'

const Hello = (props) => {
  return <div>我是组件{props.children}</div>
}
const divBox = (
  <div>
    <Hello>
      <ul>
        <li>我是子组件里边的内容</li>
      </ul>
    </Hello>
  </div>
)
ReactDOM.createRoot(document.querySelector('#root')).render(divBox)

二、props校验

2.1 props说明

  • 官网说明地址
  • 对于组件来说,props 是外来的,无法保证组件使用者传入什么格式的数据
  • 如果传入的数据格式不对,可能会导致组件内部报错,关键是:组件的使用者不能很明确的知道错误的原因
// 假设,这是 小明 创建的 List 组件
const List = props => {
  const arr = props.colors
  const lis = arr.map((item, index) => <li key={index}>{item.name}</li>)
	return (
		<ul>{lis}</ul>
	)
}

// 小红使用小明创建的 List 组件
<List colors={19} />

控制台会出现以下报错

React组件进阶之children属性,props校验与默认值以及静态属性static,React,react.js,前端

  • props校验:允许在创建组件的时候,就约定props的格式、类型

此时 控制台报错会更加明细

React组件进阶之children属性,props校验与默认值以及静态属性static,React,react.js,前端

2.2 prop-types的安装

  • 1.安装属性校验的包:npm i prop-types
  • 2.导入prop-types包
import PropTypes from 'prop-types'
  • 3.使用组件名.propTypes = {} 来给组件 List 的props添加校验规则
  • 4.为组件添加 propTypes 属性,并通过 PropTypes 对象来指定属性的类型

核心代码

import PropTypes from 'prop-types'

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

List.propTypes = {
  colors: PropTypes.array
}

2.3 props校验规则

  • 常见类型: array、bool、func、number、object、string
  • React元素类型:element
  • 必填项:isRequired
  • 特定结构的对象:shape({})

核心代码

// 常见类型
optionalFunc: PropTypes.func,
// 必选
requiredFunc: PropTypes.func.isRequired,
// 特定结构的对象
optionalObjectWithShape: PropTypes.shape({
	color: PropTypes.string,
	fontSize: PropTypes.number
})

2.4 props默认值

  • 通过defaultProps可以给组件的props设置默认值,在未传入props的时候生效

为函数组件添加 props 默认值

function App(props) {
  return (
    <div>
      此处展示props的默认值:{props.pageSize}
    </div>
  )
}
// 方式一 推荐通过函数参数默认值,来提供 props 默认值
const App = ({ pageSize = 10 }) {
  return (
    <div>
      此处展示props的默认值:{props.pageSize}
    </div>
  )
}

// 方式二 设置默认值 
App.defaultProps = {
	pageSize: 10
}
// 不传入pageSize属性
<App />

为类组件添加 props 默认值

class App extends Component {
  // 方式二:或者使用静态属性:
  static defaultProps = {
    pageSize: 10
  }

  render() {
    return (
      <div>
        此处展示props的默认值:{this.props.pageSize}
      </div>
    )
  }
}
// 方式一:设置默认值
// App.defaultProps = {
//	 pageSize: 10
// }

// 不传入pageSize属性
<App />

三、静态属性static

  • 实例成员:通过实例对象调用的属性或者方法,叫做实例成员(属性或者方法)
  • 静态成员:通过类或者构造函数本身才能访问的属性或者方法

核心代码

class Person {
  // 实例属性
  name = 'zs'
	// 实例方法
  sayHi() {
    console.log('哈哈')
  }

  // 静态属性
  static age = 18
	// 静态方法
  static goodBye() {
    console.log('byebye')
  }
}
const p = new Person()

console.log(p.name) 		// 访问实例属性
p.sayHi()								// 调用实例方法

console.log(Person.age)	// 访问静态属性
Person.goodBye()				// 调用静态方法

示例代码文章来源地址https://www.toymoban.com/news/detail-617775.html

class List extends Component {
  static propTypes = {
    colors: PropTypes.array,
    gender: PropTypes.oneOf(['male', 'female']).isRequired
  }

  static defaultProps = {
		gender: ''
  }
  
  render() {
    const arr = this.props.colors
    const lis = arr.map((item, index) => <li key={index}>{item.name}</li>)
    return <ul>{lis}</ul>
  }
}

到了这里,关于React组件进阶之children属性,props校验与默认值以及静态属性static的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包