- ReactJS 教程
- ReactJS - 首頁
- ReactJS - 簡介
- ReactJS - 路線圖
- ReactJS - 安裝
- ReactJS - 特性
- ReactJS - 優點和缺點
- ReactJS - 架構
- ReactJS - 建立 React 應用
- ReactJS - JSX
- ReactJS - 元件
- ReactJS - 巢狀元件
- ReactJS - 使用新建立的元件
- ReactJS - 元件集合
- ReactJS - 樣式
- ReactJS - 屬性 (props)
- ReactJS - 使用屬性建立元件
- ReactJS - props 驗證
- ReactJS - 建構函式
- ReactJS - 元件生命週期
- ReactJS - 事件管理
- ReactJS - 建立一個事件感知元件
- ReactJS - 在 Expense Manager 應用中引入事件
- ReactJS - 狀態管理
- ReactJS - 狀態管理 API
- ReactJS - 無狀態元件
- ReactJS - 使用 React Hooks 進行狀態管理
- ReactJS - 使用 React Hooks 進行元件生命週期管理
- ReactJS - 佈局元件
- ReactJS - 分頁
- ReactJS - Material UI
- ReactJS - Http 客戶端程式設計
- ReactJS - 表單程式設計
- ReactJS - 受控元件
- ReactJS - 非受控元件
- ReactJS - Formik
- ReactJS - 條件渲染
- ReactJS - 列表
- ReactJS - 鍵
- ReactJS - 路由
- ReactJS - Redux
- ReactJS - 動畫
- ReactJS - Bootstrap
- ReactJS - 地圖
- ReactJS - 表格
- ReactJS - 使用 Flux 管理狀態
- ReactJS - 測試
- ReactJS - CLI 命令
- ReactJS - 構建和部署
- ReactJS - 示例
- Hooks
- ReactJS - Hooks 簡介
- ReactJS - 使用 useState
- ReactJS - 使用 useEffect
- ReactJS - 使用 useContext
- ReactJS - 使用 useRef
- ReactJS - 使用 useReducer
- ReactJS - 使用 useCallback
- ReactJS - 使用 useMemo
- ReactJS - 自定義 Hooks
- ReactJS 高階
- ReactJS - 可訪問性
- ReactJS - 程式碼分割
- ReactJS - 上下文
- ReactJS - 錯誤邊界
- ReactJS - 轉發 Refs
- ReactJS - 片段
- ReactJS - 高階元件
- ReactJS - 整合其他庫
- ReactJS - 最佳化效能
- ReactJS - Profiler API
- ReactJS - 埠
- ReactJS - 無 ES6 ECMAScript 的 React
- ReactJS - 無 JSX 的 React
- ReactJS - 調和
- ReactJS - Refs 和 DOM
- ReactJS - 渲染 Props
- ReactJS - 靜態型別檢查
- ReactJS - 嚴格模式
- ReactJS - Web Components
- 其他概念
- ReactJS - 日期選擇器
- ReactJS - Helmet
- ReactJS - 內聯樣式
- ReactJS - PropTypes
- ReactJS - BrowserRouter
- ReactJS - DOM
- ReactJS - 走馬燈
- ReactJS - 圖示
- ReactJS - 表單元件
- ReactJS - 參考 API
- ReactJS 有用資源
- ReactJS - 快速指南
- ReactJS - 有用資源
- ReactJS - 討論
ReactJS - 上下文
上下文是 React 中一個重要的概念。它提供了將資訊從父元件傳遞到其所有子元件(到任何巢狀級別)的能力,而無需在每個級別都透過 props 傳遞資訊。上下文將使程式碼更易讀且更易於理解。上下文可以用來儲存不更改或更改最少的資訊。上下文的一些用例如下:
應用程式配置
當前已認證的使用者的資訊
當前使用者設定
語言設定
應用程式/使用者主題/設計配置
讓我們在本節中學習如何建立上下文及其用法。
上下文是如何工作的?
讓我們學習上下文的 基本概念以及它是如何工作的。上下文有四個部分:
建立一個新的上下文
在根元件中設定上下文提供者
在我們需要上下文資訊的元件中設定上下文消費者
訪問上下文資訊並在渲染方法中使用它
讓我們建立一個應用程式來更好地理解上下文及其用法。讓我們為在應用程式根元件中維護主題資訊建立一個全域性上下文,並在我們的子元件中使用它。
首先,使用以下命令建立並啟動一個應用程式:
create-react-app myapp cd myapp npm start
接下來,在 components 資料夾下建立一個元件 HelloWorld (src/components/HelloWorld.js)
import React from "react";
import ThemeContext from "../ThemeContext";
class HelloWorld extends React.Component {
render() {
return <div>Hello World</div>
}
}
export default HelloWorld
接下來,使用一個新的上下文 (src/ThemeContext.js) 來維護主題資訊。
import React from 'react'
const ThemeContext = React.createContext({
color: 'black',
backgroundColor: 'white'
})
export default ThemeContext
這裡,
使用 React.createContext 建立了一個新的上下文。
上下文被建模為一個包含樣式資訊的 物件。
設定文字顏色和背景的初始值。
接下來,更新根元件 App.js,包括 HelloWorld 元件和主題提供者,併為主題上下文提供初始值。
import './App.css';
import HelloWorld from './components/HelloWorld';
import ThemeContext from './ThemeContext'
function App() {
return (
<ThemeContext.Provider value={{
color: 'white',
backgroundColor: 'green'
}}>
<HelloWorld />
</ThemeContext.Provider>
);
}
export default App;
這裡,使用了 ThemeContext.Provider,它是一個非可視元件,用於設定主題上下文的值,以便在其所有子元件中使用。
接下來,在 HelloWorld 元件中包含一個上下文消費者,並使用 HelloWorld 元件中的主題資訊來設定 hello world 訊息的樣式。
import React from "react";
import ThemeContext from "../ThemeContext";
class HelloWorld extends React.Component {
render() {
return (
<ThemeContext.Consumer>
{({color, backgroundColor} ) =>
(<div style={{
color: color,
backgroundColor: backgroundColor }}>
Hello World
</div>)
}
</ThemeContext.Consumer>
)
}
}
export default HelloWorld
這裡,
使用了 ThemeContext.Consumer,它是一個非可視元件,提供了訪問當前主題上下文詳細資訊的功能
使用了函式表示式來獲取 ThemeContext.Consumer 內部的當前上下文資訊
使用了物件解構語法來獲取主題資訊並將值設定為 color 和 backgroundColor 變數。
使用主題資訊透過 style props 設定元件的樣式。
最後,開啟瀏覽器並檢查應用程式的輸出
總結
上下文減少了在 React 應用中維護全域性資料的複雜性。它提供了一個清晰的提供者和消費者概念,簡化了上下文的實現。