React中的Props類型校驗(yàn)和默認(rèn)值詳解
一、props規(guī)則校驗(yàn)
安裝 prop-types 包
$ npm install prop-types
導(dǎo)入 propTypes 對(duì)象
import propTypes from 'prop-types';
組件名.propTypes = {} 設(shè)置組件 傳參規(guī)則
Comp.propTypes = { param: propTypes.array // Comp組件 的 param 參數(shù)必須是 數(shù)組類型 }
示例:
// props 類型校驗(yàn)規(guī)則 import React from 'react'; // 1. npm i prop-types // 2. 導(dǎo)入 propTypes 對(duì)象 import PropTypes from "prop-types"; function Son({list}) { return ( <div> {list.map(item => <p key={item}>{item}</p>)} </div> ) } // 3. 組件名.propTypes = {} 給組件設(shè)置規(guī)則 Son.PropTypes={ // 4. 各字段設(shè)置規(guī)則 list: PropTypes.array // Son的list參數(shù)必須是 數(shù)組形式 } class App extends React.Component { render() { return ( <div> <Son list="我企鵝親子裝"/> </div> ) } } export default App;
報(bào)錯(cuò)提示如下:
四種常見結(jié)構(gòu)
- 常用類型:
array
、number
、bool
、string
、func
、object
、symbol
- React元素類型:
element
- 必填項(xiàng):
isRequired
- 特定的結(jié)構(gòu)對(duì)象:
shape({})
核心代碼:
// 1.類型 optionalFun: PropTypes.fun; // 2.必填項(xiàng) requiredFun: PropTypes.fun.isRequired; // 3. // 可以指定一個(gè)對(duì)象由特定的類型值組成 optionalObjectWithShape: PropTypes.shape({ color: PropTypes.string, fontSize: PropTypes.number }),
二、props默認(rèn)值
1.函數(shù)式默認(rèn)值
1.1 函數(shù)參數(shù)默認(rèn)值(新版推薦)
示例:
import React from "react"; // 1. 函數(shù)參數(shù)默認(rèn)值 function Son1({defaultTime = 10}) { return ( <div>The timer is : {defaultTime}</div> ) } class App extends React.Component { render() { return ( <div> <Son1 /> </div> ) } } export default App;
1.2 defaultProps 設(shè)置默認(rèn)值
function Son2({defaultTime}) { return ( <div>The second timer is: {defaultTime}</div> ) } // 2. defaultProps 設(shè)置默認(rèn)值 Son2.defaultProps = { defaultTime: 100 } class App extends React.Component { render() { return ( <div> <Son1 /> <Son2 /> </div> ) } }
2.類式默認(rèn)值
2.1 defaultProps
class Son3 extends React.Component { render() { return ( <div>The defaultTimer is : {this.props.defaultTime}</div> ) } } // defaultProps 設(shè)置默認(rèn)值 Son3.defaultProps = { defaultTime: 3333 }
2.2 類靜態(tài)屬性聲明
class Son4 extends React.Component { static defaultProps ={ defaultTime: 66666 } render() { return ( <div>The defaultTimer is : {this.props.defaultTime}</div> ) } }
完整示例
// props默認(rèn)值 import { func } from "prop-types"; import React from "react"; // 1.1 函數(shù)參數(shù)默認(rèn)值 function Son1({defaultTime = 10}) { return ( <div>The timer is : {defaultTime}</div> ) } function Son2({defaultTime}) { return ( <div>The second timer is: {defaultTime}</div> ) } // 1.2 defaultProps 設(shè)置默認(rèn)值 Son2.defaultProps = { defaultTime: 100 } class Son3 extends React.Component { render() { return ( <div>The defaultTimer is : {this.props.defaultTime}</div> ) } } // 2.1 函數(shù) defaultProps 設(shè)置默認(rèn)值 Son3.defaultProps = { defaultTime: 3333 } // 2.2 靜態(tài)屬性聲明 class Son4 extends React.Component { static defaultProps ={ defaultTime: 66666 } render() { return ( <div>The defaultTimer is : {this.props.defaultTime}</div> ) } } class App extends React.Component { render() { return ( <div> <Son1 /> <Son2 /> <Son3 /> <Son4 /> </div> ) } } export default App;
如圖:
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
在Create React App中使用CSS Modules的方法示例
本文介紹了如何在 Create React App 腳手架中使用 CSS Modules 的兩種方式。有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。2019-01-01React使用highlight.js Clipboard.js實(shí)現(xiàn)代碼高亮復(fù)制
這篇文章主要為大家介紹了React使用highlight.js Clipboard.js實(shí)現(xiàn)代碼高亮復(fù)制功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04React實(shí)現(xiàn)數(shù)字滾動(dòng)組件numbers-scroll的示例詳解
數(shù)字滾動(dòng)組件,也可以叫數(shù)字輪播組件,這個(gè)名字一聽就是非常普通常見的組件。本文將利用React實(shí)現(xiàn)這一組件,感興趣的小伙伴可以了解一下2023-03-03在React中強(qiáng)制重新渲染的4 種方式案例代碼
這篇文章主要介紹了在React中強(qiáng)制重新渲染的4 種方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12React中memo useCallback useMemo方法作用及使用場(chǎng)景
這篇文章主要為大家介紹了React中三個(gè)hooks方法memo useCallback useMemo的作用及使用場(chǎng)景示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2023-03-03解決React報(bào)錯(cuò)Expected?`onClick`?listener?to?be?a?function
這篇文章主要為大家介紹了React報(bào)錯(cuò)Expected?`onClick`?listener?to?be?a?function解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12