詳解如何在React組件“外”使用父組件的Props
在寫SDK項目的時候碰到一個問題:在直播間初始化SDK時使用默認主題,在專題頁初始化SDK時使用其它主題。默認主題在打包時掛在全局環(huán)境下供多個頁面使用,定制主題需要在初始化SDK的時候傳入。
實現(xiàn)起來很簡單,判斷是否有定制主題,有就使用定制主題,沒有就使用默認主題。項目下的基本組件大多是這樣的:
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> ) }
定制主題是通過初始化SDK傳進來的,子組件可以通過props或者context拿到,但是卻不能在class外的styles里面直接使用。
那么如何實現(xiàn)在組件“外”使用父組件的Props呢?如果我們可以把需要使用的Props掛在“全局環(huán)境”下,那么不就可以隨便使用了嗎?
項目結(jié)構(gòu)如下:
. |——src | |——lib //公用庫 | |——services //抽離出的方法 | |——index.js | └──App | └──app.js └── ...
首先,在services中新建一個customTheme.js文件,內(nèi)容如下:
let value = {} export default () => { const setTheme = (initColor) => { value = initColor } const getTheme = () => { return value } return { setTheme, getTheme, } }
在index.js文件中我們可以拿到初始化SDK時傳入的定制主題對象,這里我們把這個對象存儲到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> ) }
哈哈,就是這么簡單,分享給跟我一樣的菜鳥們,以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- react中props 的使用及進行限制的方法
- React三大屬性之props的使用詳解
- ES6 class類鏈式繼承,實例化及react super(props)原理詳解
- react高階組件添加和刪除props
- React性能優(yōu)化系列之減少props改變的實現(xiàn)方法
- 使用react render props實現(xiàn)倒計時的示例代碼
- 談?wù)凴eact中的Render Props模式
- 詳解React中傳入組件的props改變時更新組件的幾種實現(xiàn)方法
- react 父子組件之間通訊props
- React props和state屬性的具體使用方法
- React教程之Props驗證的具體用法(Props Validation)
- React-Native中props具體使用詳解
- 詳解React中Props的淺對比
相關(guān)文章
React構(gòu)建簡潔強大可擴展的前端項目架構(gòu)
這篇文章主要為大家介紹了React構(gòu)建簡潔強大可擴展的前端項目架構(gòu)實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08再次談?wù)揜eact.js實現(xiàn)原生js拖拽效果引起的一系列問題
React 起源于 Facebook 的內(nèi)部項目,因為該公司對市場上所有 JavaScript MVC 框架,都不滿意,就決定自己寫一套,用來架設(shè) Instagram 的網(wǎng)站.本文給大家介紹React.js實現(xiàn)原生js拖拽效果,需要的朋友一起學(xué)習(xí)吧2016-04-04React 組件的狀態(tài)下移和內(nèi)容提升的操作方法
這篇文章主要介紹了React 組件的狀態(tài)下移和內(nèi)容提升,通過代碼講解了渲染性能的組件問題結(jié)合實例代碼給大家講解的非常詳細,需要的朋友可以參考下2022-11-11在React中如何優(yōu)雅的處理事件響應(yīng)詳解
這篇文章主要給大家介紹了關(guān)于在React中如何優(yōu)雅處理事件響應(yīng)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-07-07React報錯Element type is invalid解決案例
這篇文章主要為大家介紹了React報錯Element type is invalid解決案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12使用React hook實現(xiàn)remember me功能
相信大家在使用 React 寫頁面的時候都遇到過完成 Remember me 的需求吧!本文就將這個需求封裝在一個 React hook 中以供后續(xù)的使用,覺得有用的同學(xué)可以收藏起來以備不時之需,感興趣的小伙伴跟著小編一起來看看吧2024-04-04