react的context和props詳解
一、context
1. 使用場(chǎng)景
設(shè)想一個(gè)場(chǎng)景,假如我們要給子孫組件傳值,應(yīng)該怎么辦呢?
如果使用props一層一層往下 傳遞的話,特別的繁瑣!
更好的辦法:使用context來(lái)幫助我們跨組件傳遞數(shù)據(jù)
2. 使用步驟
- 調(diào)用 React.createContext() 創(chuàng)建 Provider(提供數(shù)據(jù)) 和 Consumer(消費(fèi)數(shù)據(jù)) 兩個(gè)組件
const { Provider, Consumer } = React.createContext()
- 使用 Provider 組件作為父節(jié)點(diǎn)。
<Provider>
<div className="App">
<Child1 />
</div>
</Provider>
- 設(shè)置 value 屬性,表示要傳遞的數(shù)據(jù)。
<Provider value="pink">
- 調(diào)用 Consumer 組件接收數(shù)據(jù)。
<Consumer>
{data => <span>data參數(shù)表示接收到的數(shù)據(jù) -- {data}</span>}
</Consumer>
3. 總結(jié)
- 如果兩個(gè)組件是多層嵌套可以使用Context實(shí)現(xiàn)組件通訊
Context提供了兩個(gè)組件:Provider和ConsumerProvider組件:用來(lái)提供數(shù)據(jù)Consumer組件:用來(lái)消費(fèi)數(shù)據(jù)
二、props深入
1. children 屬性
children 屬性:表示組件標(biāo)簽的子節(jié)點(diǎn)。當(dāng)組件標(biāo)簽有子節(jié)點(diǎn)時(shí),props 就會(huì)有該屬性
children 屬性與普通的props一樣,值可以是任意值(文本、標(biāo)簽、組件、甚至是函數(shù))
代碼如下(示例):
function Hello(props) {
return (
<div>
組件的子節(jié)點(diǎn):{props.children}
</div>
)
}
<Hello>我是子節(jié)點(diǎn)</Hello>
2. props 校驗(yàn)
對(duì)于組件來(lái)說(shuō),props 是外部數(shù)據(jù)的容器,無(wú)法保證組件使用者傳入什么格式的數(shù)據(jù)
如果傳入的數(shù)據(jù)格式不對(duì),可能會(huì)導(dǎo)致組件內(nèi)部報(bào)錯(cuò)
關(guān)鍵問(wèn)題:除了語(yǔ)法報(bào)錯(cuò)信息之外沒(méi)有額外的錯(cuò)誤提示
代碼如下(示例):
// 創(chuàng)建的組件
function App(props) {
const arr = props.colors
const list = arr.map((item, index) => <li key={index}>{item}</li>)
return (
<ul>{list}</ul>
)
}
// 使用組件時(shí)
<App colors={19} />
props 校驗(yàn):允許在創(chuàng)建組件的時(shí)候,就指定 props 的類型、格式等
作用:捕獲使用組件時(shí)因?yàn)閜rops導(dǎo)致的錯(cuò)誤,給出明確的錯(cuò)誤提示,增加組件的健壯性

3. props校驗(yàn)使用步驟
- 安裝 prop-types (npm i prop-types )
- 導(dǎo)入 prop-types 包
- 使用 組件名.propTypes = {} 來(lái)給組件的props添加校驗(yàn)規(guī)則
- 校驗(yàn)規(guī)則通過(guò) PropTypes 對(duì)象來(lái)指定
import PropTypes from 'prop-types'
function App(props) {
return (
<h1>Hi, {props.colors}</h1>
)
}
App.propTypes = {
// 約定colors屬性為array類型
// 如果類型不對(duì),則報(bào)出明確錯(cuò)誤,便于分析錯(cuò)誤原因
colors: PropTypes.array
}
4. props校驗(yàn)約束規(guī)則
常見(jiàn)類型: number、 string、 array、bool、func、object
React元素類型:element
必填項(xiàng):isRequired
特定結(jié)構(gòu)的對(duì)象:shape({ })
// 常見(jiàn)類型
optionalFunc: PropTypes.func,
// 必選
requiredFunc: PropTypes.func.isRequired,
// 特定結(jié)構(gòu)的對(duì)象
optionalObjectWithShape: PropTypes.shape({
color: PropTypes.string,
fontSize: PropTypes.number
})
5. props默認(rèn)值
場(chǎng)景:分頁(yè)組件 → 每頁(yè)顯示條數(shù)
作用:給 props 設(shè)置默認(rèn)值,在未傳入 props 時(shí)生效
function App(props) {
return (
<div>
此處展示props的默認(rèn)值:{props.pageSize}
</div>
)
}
// 設(shè)置默認(rèn)值
App.defaultProps = {
pageSize: 10
}
// 不傳入pageSize屬性
<App />
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
antd-react使用Select組件defaultValue踩的坑及解決
這篇文章主要介紹了antd-react使用Select組件defaultValue踩的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
react antd表格中渲染一張或多張圖片的實(shí)例
這篇文章主要介紹了react antd表格中渲染一張或多張圖片的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
React路由動(dòng)畫(huà)切換實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了react-router 路由切換動(dòng)畫(huà)的實(shí)現(xiàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2022-12-12
React工作流程及Error Boundaries實(shí)現(xiàn)過(guò)程講解
這篇文章主要介紹了React工作流程及Error Boundaries實(shí)現(xiàn)過(guò)程講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-02-02
React-Native中禁用Navigator手勢(shì)返回的示例代碼
本篇文章主要介紹了React-Native中禁用Navigator手勢(shì)返回的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09
React Native react-navigation 導(dǎo)航使用詳解
本篇文章主要介紹了React Native react-navigation 導(dǎo)航使用詳解,詳解的介紹了react-navigation導(dǎo)航的使用,具有一定的參考價(jià)值,有興趣的可以了解一下2017-12-12

