React中props使用介紹
1.繼續(xù)深入state
state有兩種用法:
setState({}) 和 setState(()=>{})
第一種用法本質(zhì)是:我寫(xiě)了這個(gè)屬性,然后進(jìn)行覆蓋操作。
第二種用法好處是:回調(diào)函數(shù)中的第一個(gè)參數(shù)是state。這樣的話看起來(lái)獲取到原先state上的數(shù)據(jù)也更加簡(jiǎn)單!
setState修改數(shù)據(jù)實(shí)現(xiàn)響應(yīng)式的本質(zhì)
在每次修改之后,會(huì)重新調(diào)用render函數(shù)。
2.props
什么是props?
? props 是組件傳遞的參數(shù)。子組件通過(guò)this.props來(lái)接受!
在類(lèi)組件中:
props通過(guò)子組件的this.props來(lái)接受父組件傳過(guò)來(lái)的props值。
組件是可以復(fù)用的,最常見(jiàn)的就是循環(huán)來(lái)使用。與Vue不同的是:React他沒(méi)有指令這一說(shuō)法。jsx語(yǔ)法會(huì)自動(dòng)循環(huán)數(shù)組。通常處理數(shù)組都采用高階函數(shù)。例如
沒(méi)有循環(huán)的用法:
<div class="box1"></div>
<script src="../../js/react.development.js"></script>
<script src="../../js/react-dom.development.js"></script>
<script src="../../js/babel.min.js"></script>
<script type="text/babel">
// 子組件
class Info extends React.Component {
render() {
const { name, age, sex } = this.props
return <div>
<h2>子組件Child</h2>
<div>姓名: {name}</div>
<div>年齡: {age}</div>
<div>性別: {sex}</div>
</div>
}
}
// 父組件
class Demo extends React.Component {
state = {
arr: [
{
name: '北幕',
age: 18,
sex: "man"
},
{
name: '北幕',
age: 18,
sex: "man"
},
{
name: '北幕',
age: 18,
sex: "man"
}
]
}
render() {
return (
<div>
<h1>我是Demo組件</h1>
<hr />
<Info name="耀陽(yáng)" age="18" sex="男"></Info>
<Info name="呂德華" age="18" sex="男"></Info>
<Info name="北幕" age="18" sex="男"></Info>
</div>
)
}
}
ReactDOM.render(<Demo></Demo>, document.querySelector('.box1'))
</script>有循環(huán)的用法
<div class="box1"></div>
<script src="../../js/react.development.js"></script>
<script src="../../js/react-dom.development.js"></script>
<script src="../../js/babel.min.js"></script>
<script type="text/babel">
// 子組件
class Info extends React.Component {
render() {
const { name, age, sex } = this.props
return <div>
<h2>子組件Child</h2>
<div>姓名: {name}</div>
<div>年齡: {age}</div>
<div>性別: {sex}</div>
</div>
}
}
// 父組件
class Demo extends React.Component {
state = {
arr: [
{
name: '北幕',
age: 18,
sex: "man"
},
{
name: '北幕',
age: 18,
sex: "man"
},
{
name: '北幕',
age: 18,
sex: "man"
}
]
}
render() {
return (
<div>
<h1>我是Demo組件</h1>
<hr />
{
this.state.arr.map(item => <Info name={item.name} age={item.age} sex={item.sex} ></Info>)
}
</div>
)
}
}
ReactDOM.render(<Demo></Demo>, document.querySelector('.box1'))
</script>Props幾個(gè)特點(diǎn):
子組件不能修改傳遞的Props數(shù)據(jù),只能由父組件來(lái)修改,或者從數(shù)據(jù)的源頭來(lái)修改。
父組件傳遞參數(shù),可以是其他的類(lèi)型,利用jsx語(yǔ)法:{},跟vue的插值語(yǔ)法類(lèi)似:都是js表達(dá)式!
父組件傳遞多個(gè)數(shù)據(jù){…obj}
對(duì)象解構(gòu)還是對(duì)象?。?!
<div class="box1"></div>
<script src="../../js/react.development.js"></script>
<script src="../../js/react-dom.development.js"></script>
<script src="../../js/babel.min.js"></script>
<script type="text/babel">
// 子組件
class Info extends React.Component {
render() {
const { name, age, sex } = this.props
return <div>
<h2>子組件Child</h2>
<div>姓名: {name}</div>
<div>年齡: {age}</div>
<div>性別: {sex}</div>
</div>
}
}
// 父組件
class Demo extends React.Component {
state = {
obj: {
name: "耀陽(yáng)1", age: "18", sex: "男"
}
}
render() {
return (
<div>
<h1>我是Demo組件</h1>
<hr />
<Info {...this.state.obj}></Info>
<Info name="呂德華" age="18" sex="男"></Info>
<Info name="北幕" age="18" sex="男"></Info>
</div>
)
}
}
ReactDOM.render(<Demo></Demo>, document.querySelector('.box1'))
</script>3.限制Props的傳遞類(lèi)型
子組件接收父組件的類(lèi)型,父組件可以隨意的定義,
? a. 子組件限制父組件傳遞的數(shù)據(jù)類(lèi)型
? b. 引入prop-types庫(kù)
? c. 需要在類(lèi)上設(shè)置一個(gè)屬性 propTypes,誰(shuí)想限制給誰(shuí)設(shè)置。寫(xiě)在類(lèi)上面方法(靜態(tài)方法)
? d. 設(shè)置默認(rèn)值 defaultProps = {}
這個(gè)不需要記住,用的時(shí)候查閱即可!
限制類(lèi)型的簡(jiǎn)寫(xiě):可以使用static靜態(tài)方法。
4.函數(shù)接收props參數(shù)
函數(shù)中的state在hook中才能使用。暫時(shí)先不考慮。
函數(shù)的第一個(gè)參數(shù)就是props,在函數(shù)中只需要用第一個(gè)參數(shù)來(lái)接受即可
5.插槽
props下面的Childrene
到此這篇關(guān)于React中props使用介紹的文章就介紹到這了,更多相關(guān)React props內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解析react?函數(shù)組件輸入卡頓問(wèn)題?usecallback?react.memo
useMemo是一個(gè)react hook,我們可以使用它在組件中包裝函數(shù)??梢允褂盟鼇?lái)確保該函數(shù)中的值僅在依賴(lài)項(xiàng)之一發(fā)生變化時(shí)才重新計(jì)算,這篇文章主要介紹了react?函數(shù)組件輸入卡頓問(wèn)題?usecallback?react.memo,需要的朋友可以參考下2022-07-07
React父組件數(shù)據(jù)實(shí)時(shí)更新了,子組件沒(méi)有更新的問(wèn)題
這篇文章主要介紹了React父組件數(shù)據(jù)實(shí)時(shí)更新了,子組件沒(méi)有更新的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
教你使用vscode 搭建react-native開(kāi)發(fā)環(huán)境
本文記錄如何使用vscode打造一個(gè)現(xiàn)代化的react-native開(kāi)發(fā)環(huán)境,旨在提高開(kāi)發(fā)效率和質(zhì)量。本文給大家分享我遇到的問(wèn)題及解決方法,感興趣的朋友跟隨小編一起看看吧2021-07-07
React應(yīng)用中避免白屏現(xiàn)象的方法小結(jié)
在開(kāi)發(fā)React應(yīng)用程序時(shí),我們都曾遇到過(guò)這樣的場(chǎng)景:一個(gè)未被捕獲的異常突然中斷了組件的渲染流程,導(dǎo)致用戶(hù)界面呈現(xiàn)出一片空白,也就是俗稱(chēng)的“白屏”現(xiàn)象,本文將探討如何在React應(yīng)用中有效捕獲并處理這些錯(cuò)誤,避免白屏現(xiàn)象的發(fā)生,需要的朋友可以參考下2024-06-06
將React+Next.js的項(xiàng)目部署到服務(wù)器的方法
本文詳細(xì)介紹了將React+Next.js項(xiàng)目部署到服務(wù)器的步驟,包括服務(wù)器環(huán)境準(zhǔn)備、項(xiàng)目配置與構(gòu)建、啟動(dòng)服務(wù)、配置Nginx反向代理、HTTPS配置、驗(yàn)證與監(jiān)控以及高級(jí)優(yōu)化,感興趣的朋友一起看看吧2025-03-03
詳解react native頁(yè)面間傳遞數(shù)據(jù)的幾種方式
這篇文章主要介紹了詳解react native頁(yè)面間傳遞數(shù)據(jù)的幾種方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
React實(shí)現(xiàn)動(dòng)態(tài)調(diào)用的彈框組件
這篇文章主要為大家詳細(xì)介紹了React實(shí)現(xiàn)動(dòng)態(tài)調(diào)用的彈框組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08

