網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
react組件實(shí)例屬性props
props
props簡(jiǎn)單使用
class Person extends React.Component {
render() {
return (
<ul>
<li>姓名:{this.props.name}</li>
<li>年齡:{this.props.age}</li>
<li>性別:{this.props.sex}</li>
</ul>
)
}
}
const root = ReactDOM.createRoot(document.getElementById('test'));
// 這里props屬性要寫(xiě)成key:"value"形式,但是會(huì)默認(rèn)將value視為字符串,若想傳遞js類型的字面量,則要加{}
root.render(<Person name="kl" age={19} sex="男" />);
props批量操作
class Person extends React.Component {
render() {
return (
<ul>
<li>姓名:{this.props.name}</li>
<li>年齡:{this.props.age}</li>
<li>性別:{this.props.sex}</li>
</ul>
)
}
}
const root = ReactDOM.createRoot(document.getElementById('test'));
const p = { name: "lml", sex: "nan", age: 18 }
root.render(<Person {...p} />);
props屬性類型限制
需要導(dǎo)入prop-type
https://unpkg.com/prop-types@15.6/prop-types.js
class Person extends React.Component {
render() {
return (
<ul>
<li>姓名:{this.props.name}</li>
<li>年齡:{this.props.age + 1}</li>
<li>性別:{this.props.sex}</li>
</ul>
)
}
}
// 對(duì)props限制
Person.propTypes = {
name: PropTypes.string.isRequired,
sex: PropTypes.string,
age: PropTypes.number,
speak: PropTypes.func, // 限制為函數(shù)
}
// props默認(rèn)值
Person.defaultProps = {
sex: '不男不女',
age: 18,
}
function speak() {
console.log('說(shuō)話了');
}
const root = ReactDOM.createRoot(document.getElementById('test'));
// 這里props屬性要寫(xiě)成key:"value"形式,但是會(huì)默認(rèn)將value視為字符串,若想傳遞js類型的字面量,則要加{}
root.render(<Person name="lml" age={19} speak={speak} />);
props屬性限制的簡(jiǎn)寫(xiě)
class Person extends React.Component {
// 對(duì)props限制
static propTypes = {
name: PropTypes.string.isRequired,
sex: PropTypes.string,
age: PropTypes.number,
speak: PropTypes.func, // 限制為函數(shù)
}
// props默認(rèn)值
static defaultProps = {
sex: '不男不女',
age: 18,
}
render() {
return (
<ul>
<li>姓名:{this.props.name}</li>
<li>年齡:{this.props.age + 1}</li>
<li>性別:{this.props.sex}</li>
</ul>
)
}
}
const root = ReactDOM.createRoot(document.getElementById('test'));
root.render(<Person name="lml" age={19} />);
函數(shù)組件使用props
function People(props) {
return (
<ul>
<li>name:{props.name}</li>
<li>age:{props.age}</li>
</ul>
)
}
const root = ReactDOM.createRoot(document.getElementById('test'));
root.render(<People name="lml" age={19} />);
補(bǔ)充:React之組件實(shí)例的三大屬性之props
props
每個(gè)組件對(duì)象都會(huì)有props(properties的簡(jiǎn)寫(xiě))屬性
組件標(biāo)簽的所有屬性都保存在props中
通過(guò)標(biāo)簽屬性從組件外向組件內(nèi)傳遞變化的數(shù)據(jù),組件內(nèi)不能夠修改props數(shù)據(jù)
實(shí)例
做一個(gè)能夠展示姓名、學(xué)號(hào)、性別的列表組件,并且能夠設(shè)置默認(rèn)值。
這里就需要用到之前沒(méi)用到的prop-types.js了
為了防止react太笨重,就將限制類型的模塊單獨(dú)抽了出來(lái),方便選擇是否使用,需要使用導(dǎo)入即可。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="test1"></div>
<div id="test2"></div>
<div id="test3"></div>
<div id="test4"></div>
<script src="../js/react.development.js"></script>
<script src="../js/react-dom.development.js"></script>
<script src="../js/babel.min.js"></script>
<script src="../js/prop-types.js"></script>
<script type="text/babel">
class Person extends React.Component {
//對(duì)標(biāo)簽屬性進(jìn)行類型、必要性的限制
static propTypes = {
name:PropTypes.string.isRequired, //限制name必傳,且為字符串
sex:PropTypes.string,
age:PropTypes.number, //限制為數(shù)字
speak:PropTypes.func //限制為函數(shù)
}
//指定模標(biāo)簽屬性值
static defaultProps ={
sex:"男",
age:18
}
render() {
//props只讀不能改
const {name, age, gender} = this.props
return (
<ul>
<li>{name}</li>
<li>{age}</li>
<li>{gender}</li>
</ul>
)
}
}
ReactDOM.render(<Person name="tom" age={19} gender="男"/>, document.getElementById("test1"))
ReactDOM.render(<Person name="pretty" gender="女"/>, document.getElementById("test2"))
ReactDOM.render(<Person name="hunter" age={21} gender="男"/>, document.getElementById("test3"))
const p = {name:"AABB", age:19, gender:"UNK"}
//展開(kāi)運(yùn)算符
ReactDOM.render(<Person {...p}/>, document.getElementById("test4"))
function speak(){
console.log("speaking...")
}
</script>
</body>
</html>
前言萬(wàn)語(yǔ)都在注釋里,運(yùn)行結(jié)果:
如果我們將AABB的age改成字符型
const p = {name:"AABB", age:"19", gender:"UNK"}
那么結(jié)果如下:
會(huì)警告數(shù)據(jù)類型錯(cuò)誤,達(dá)到限制數(shù)據(jù)類型的提示。
原文鏈接:https://www.cnblogs.com/ucbb/archive/2023/01/29/17073870.html
相關(guān)推薦
- 2022-11-06 SQL?Server?Reporting?Services?匿名登錄的問(wèn)題及解決方案_MsSql
- 2022-09-05 C語(yǔ)言之把數(shù)組名作函數(shù)參數(shù)的四種情況說(shuō)明_C 語(yǔ)言
- 2022-02-03 yii joinwith查數(shù)據(jù)的問(wèn)題
- 2023-08-01 在 TypeScript 中 interface 和 type 的區(qū)別
- 2023-01-05 C++的new和delete使用示例詳解_C 語(yǔ)言
- 2022-09-27 Kotlin淺析延遲初始化與密封類的實(shí)現(xiàn)方法_Android
- 2022-05-12 android studio viewBinding 老爆紅
- 2023-08-15 vite打包報(bào)錯(cuò) Rollup failed to resolve
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支