摘要:創(chuàng)建消費(fèi)者是一個(gè)組件,包裹在其中的函數(shù)組件可以訪問到聲明時(shí)候傳入的,并且在的變動(dòng)的時(shí)候,再次渲染。使用效果整個(gè)栗子修改主題
0x000 概述
Context就是全局state啦~~
0x001 問題先上栗子,我們需要在Topbar中用到theme,但是theme必須從最外層傳入,所以必須從最外層傳入App,再傳入TopBar,這只傳遞了兩次,但是如果全部組件都需要theme呢?或者有一個(gè)非常深的組件需要theme,而中間的大部分組件都不需要theme呢?為了傳遞這個(gè)theme必須一層一層的傳遞下去,有點(diǎn)難受。
class TopBar extends React.Component { redder() { return0x002 解決{this.props.theme}} } class App extends React.Component { render() { return} } ReactDom.render(, document.getElementById("app") )
Context可以解決這個(gè)問題,上栗子:
創(chuàng)建context
const ThemeContext = React.createContext("theme");
React.createContext創(chuàng)建了一個(gè)context,它返回一個(gè)對(duì)象,可以打印出來:
需要注意的是:
Consumer:消費(fèi)者
Provider:提供者
創(chuàng)建提供者
class App extends React.Component { constructor(props) { super(props); this.state = { theme: "dark" } } render() { return (); } handleChangeTheme() { this.setState({ theme: this.state.theme === "light" ? "dark" : "light" }) } }
ThemeContext.Provider是一個(gè)組件,value屬性提供的值在所有的Consumer中都可以訪問到,前提是必須包裹在Provider中。
創(chuàng)建消費(fèi)者
class ThemedButton extends React.Component { render() { return{ (value) => } }{value}}
ThemeContext.consumer是一個(gè)組件,包裹在其中的函數(shù)組件可以訪問到ThemeContext.Provider聲明時(shí)候傳入的value,并且在ThemeContext.Provider的value變動(dòng)的時(shí)候,再次渲染。
使用
ReactDom.render(, document.getElementById("app") )
效果
整個(gè)栗子:
import ReactDom from "react-dom" import React from "react" const ThemeContext = React.createContext("theme"); class ThemedButton extends React.Component { render() { return{ (value) => } } class App extends React.Component { constructor(props) { super(props); this.state = { theme: "dark" } } render() { return ({value}}); } handleChangeTheme() { this.setState({ theme: this.state.theme === "light" ? "dark" : "light" }) } } ReactDom.render( , document.getElementById("app") )
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/99484.html
摘要:概述和差不多,但是有一些不同只能存儲(chǔ)對(duì)象,不能存儲(chǔ)任意值不可迭代是弱引用,也就是如果沒有變量引用內(nèi)的值,很容易被回收初始化因?yàn)橹荒艽鎯?chǔ)對(duì)象,所以這里我想只能傳入類似對(duì)象數(shù)組之類的東西對(duì)象數(shù)組添加判斷是否已經(jīng)有了刪除弱引用特性后輸出,可以看到 0x000 概述 WeakSet和Set差不多,但是有一些不同: WeakSet只能存儲(chǔ)對(duì)象,不能存儲(chǔ)任意值 WeakSet不可迭代 We...
摘要:安裝必要的開發(fā)包安裝兩個(gè)包安裝編寫一個(gè)的首先我們編寫一個(gè)的組件但是這僅僅是一個(gè)組件,我們需要一個(gè)頁面來容納的組件。到這一步,需要準(zhǔn)備的東西已經(jīng)完成了。 2.1 采用create react app 編寫 create-react-app項(xiàng)目 [[點(diǎn)擊前往Github]](https://github.com/facebook/c... 是facebook推出的入門初始化項(xiàng)目,適合新手第...
摘要:概述函數(shù)組件其實(shí)就是一個(gè)函數(shù),一個(gè)函數(shù)。所以可以用來做一些快速的封裝,比如,一個(gè)組件的代碼太多,顯得咋亂,又沒有復(fù)雜到需要另起一個(gè)組件,可以用函數(shù)組件源碼這是標(biāo)題欄這是導(dǎo)航欄哈哈效果總結(jié)沒有多余的東西,對(duì)性能也有所提升哦 0x000 概述 函數(shù)組件其實(shí)就是一個(gè)函數(shù),一個(gè)render函數(shù)。 0x001 栗子 源碼 import React from react import Reac...
摘要:本篇講解轉(zhuǎn)義標(biāo)簽投影定義,這幾項(xiàng)與如何分離界面設(shè)計(jì)有關(guān)。找一個(gè)替代品如上一篇非正經(jīng)入門之一所述,要克服漿糊的不利影響,要找一個(gè)替代品。本文完本專欄歷史文章介紹一項(xiàng)讓可以與抗衡的技術(shù)可視化開發(fā)工具非正經(jīng)入門之一三宗罪 本系列博文從 Shadow Widget 作者的視角,解釋該框架的設(shè)計(jì)要點(diǎn)。本篇講解轉(zhuǎn)義標(biāo)簽、json-x、投影定義,這幾項(xiàng)與 如何分離界面設(shè)計(jì) 有關(guān)。 ? 1. 找一個(gè) ...
閱讀 1999·2021-11-19 09:40
閱讀 1956·2021-09-28 09:36
閱讀 2291·2021-09-22 10:02
閱讀 2732·2019-08-30 14:00
閱讀 1957·2019-08-29 15:31
閱讀 2904·2019-08-29 15:11
閱讀 2913·2019-08-29 13:04
閱讀 1087·2019-08-27 10:55