詳解如何在React組件“外”使用父組件的Props
在寫SDK項(xiàng)目的時(shí)候碰到一個(gè)問(wèn)題:在直播間初始化SDK時(shí)使用默認(rèn)主題,在專題頁(yè)初始化SDK時(shí)使用其它主題。默認(rèn)主題在打包時(shí)掛在全局環(huán)境下供多個(gè)頁(yè)面使用,定制主題需要在初始化SDK的時(shí)候傳入。
實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,判斷是否有定制主題,有就使用定制主題,沒有就使用默認(rèn)主題。項(xiàng)目下的基本組件大多是這樣的:
import { h, Component } from 'lib/preact'
import csjs from 'lib/csjs'
import { theme } from 'lib/platform'
const styles = csjs`
.app {
background: ${theme.color};
}
`
export default class App extends Component {
render(
<div className='styles.app'></div>
)
}
定制主題是通過(guò)初始化SDK傳進(jìn)來(lái)的,子組件可以通過(guò)props或者context拿到,但是卻不能在class外的styles里面直接使用。
那么如何實(shí)現(xiàn)在組件“外”使用父組件的Props呢?如果我們可以把需要使用的Props掛在“全局環(huán)境”下,那么不就可以隨便使用了嗎?
項(xiàng)目結(jié)構(gòu)如下:
. |——src | |——lib //公用庫(kù) | |——services //抽離出的方法 | |——index.js | └──App | └──app.js └── ...
首先,在services中新建一個(gè)customTheme.js文件,內(nèi)容如下:
let value = {}
export default () => {
const setTheme = (initColor) => {
value = initColor
}
const getTheme = () => {
return value
}
return {
setTheme,
getTheme,
}
}
在index.js文件中我們可以拿到初始化SDK時(shí)傳入的定制主題對(duì)象,這里我們把這個(gè)對(duì)象存儲(chǔ)到customTheme.js里的value中:
import customTheme from './services/customTheme'
...
const setTheme = (customTheme() || {}).setTheme
setTheme && setTheme(customTheme)
...
這樣就可以在其它地方直接拿到customTheme的值了
import { h, Component } from 'lib/preact'
import csjs from 'lib/csjs'
import { theme } from 'lib/platform'
import customTheme from '../services/customTheme'
const getTheme = (customTheme() || {}).getTheme
const custom_theme = getTheme && getTheme()
const styles = csjs`
.app {
background: ${custom_theme.color || theme.color};
}
`
export default class App extends Component {
render(
<div className='styles.app'></div>
)
}
哈哈,就是這么簡(jiǎn)單,分享給跟我一樣的菜鳥們,以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- react中props 的使用及進(jìn)行限制的方法
- React三大屬性之props的使用詳解
- ES6 class類鏈?zhǔn)嚼^承,實(shí)例化及react super(props)原理詳解
- react高階組件添加和刪除props
- React性能優(yōu)化系列之減少props改變的實(shí)現(xiàn)方法
- 使用react render props實(shí)現(xiàn)倒計(jì)時(shí)的示例代碼
- 談?wù)凴eact中的Render Props模式
- 詳解React中傳入組件的props改變時(shí)更新組件的幾種實(shí)現(xiàn)方法
- react 父子組件之間通訊props
- React props和state屬性的具體使用方法
- React教程之Props驗(yàn)證的具體用法(Props Validation)
- React-Native中props具體使用詳解
- 詳解React中Props的淺對(duì)比
相關(guān)文章
nodejs和react實(shí)現(xiàn)即時(shí)通訊簡(jiǎn)易聊天室功能
這篇文章主要介紹了nodejs和react實(shí)現(xiàn)即時(shí)通訊簡(jiǎn)易聊天室功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
字節(jié)封裝React組件手機(jī)號(hào)自動(dòng)校驗(yàn)格式FormItem
這篇文章主要為大家介紹了字節(jié)封裝React組件手機(jī)號(hào)自動(dòng)校驗(yàn)格式FormItem,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
在react項(xiàng)目中使用antd的form組件,動(dòng)態(tài)設(shè)置input框的值
這篇文章主要介紹了在react項(xiàng)目中使用antd的form組件,動(dòng)態(tài)設(shè)置input框的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
React導(dǎo)入less及其注意事項(xiàng)說(shuō)明
在Vite構(gòu)建的React項(xiàng)目中,直接安裝和導(dǎo)入Less即可使用,但需注意的是,Less的樣式作用域不局限于模塊內(nèi)部,可能造成樣式污染,建議通過(guò)修改文件名和導(dǎo)入方式來(lái)避免此問(wèn)題2024-11-11
如何將你的AngularJS1.x應(yīng)用遷移至React的方法
本篇文章主要介紹了如何將你的AngularJS1.x應(yīng)用遷移至React的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
詳解超簡(jiǎn)單的react服務(wù)器渲染(ssr)入坑指南
這篇文章主要介紹了詳解超簡(jiǎn)單的react服務(wù)器渲染(ssr)入坑指南,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02

