react組件實(shí)例屬性props實(shí)例詳解
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ù)類型的提示。
到此這篇關(guān)于react組件實(shí)例屬性props的文章就介紹到這了,更多相關(guān)react組件實(shí)例屬性props內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在console中打印React Fiber樹(shù)的操作步驟
React Fiber 是 React 16 中引入的新的協(xié)調(diào)引擎或重寫(xiě)的核心算法, 真針Fiber的一個(gè)重要的核心概念Fiber Node,這次主要的研究對(duì)象是: 如何從使用者/學(xué)習(xí) 者角度 在js 代碼上 拿到fiber 樹(shù)結(jié)構(gòu)的信息,,需要的朋友可以參考下2024-04-04React和Vue實(shí)現(xiàn)文件下載進(jìn)度條
本文主要介紹了React和Vue實(shí)現(xiàn)文件下載進(jìn)度條,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04React useImperativeHandle處理組件狀態(tài)和生命周期用法詳解
React Hooks 為我們提供了一種全新的方式來(lái)處理組件的狀態(tài)和生命周期,useImperativeHandle是一個(gè)相對(duì)較少被提及的Hook,但在某些場(chǎng)景下,它是非常有用的,本文將深討useImperativeHandle的用法,并通過(guò)實(shí)例來(lái)加深理解2023-09-09React onClick/onChange傳參(bind綁定)問(wèn)題
這篇文章主要介紹了React onClick/onChange傳參(bind綁定)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-0230分鐘精通React今年最勁爆的新特性——React Hooks
這篇文章主要介紹了30分鐘精通React今年最勁爆的新特性——React Hooks,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03Mobx實(shí)現(xiàn)React?應(yīng)用的狀態(tài)管理詳解
這篇文章主要為大家介紹了Mobx?實(shí)現(xiàn)?React?應(yīng)用的狀態(tài)管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12使用ReactJS實(shí)現(xiàn)tab頁(yè)切換、菜單欄切換、手風(fēng)琴切換和進(jìn)度條效果
這篇文章主要介紹了使用ReactJS實(shí)現(xiàn)tab頁(yè)切換、菜單欄切換、手風(fēng)琴切換和進(jìn)度條效果的相關(guān)資料,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10