ホームページ >ウェブフロントエンド >jsチュートリアル >React の Context API をマスターする: グローバル状態を共有するための包括的なガイド
React の Context API は、すべてのレベルで手動で props を渡すことなく、コンポーネント間で値を共有できる強力な機能です。これは、テーマ、認証ステータス、ユーザー設定などのグローバル データをアプリ内の複数のコンポーネント間で共有する場合に特に役立ちます。
Context API は、ネストの深さに関係なく、コンポーネント ツリー内の任意のコンポーネントからアクセスできるグローバル状態を作成する方法を提供します。すべての中間コンポーネントにプロパティを渡すプロップドリルの代わりに、Context API を使用してこれを回避し、コードをよりクリーンで管理しやすくすることができます。
Context API は 3 つの主要部分で構成されます:
まず、React.createContext() を使用してコンテキストを作成します。この関数は、Provider と Consumer を含むオブジェクトを返します。
import React, { createContext, useState } from 'react'; // Step 1: Create the context const ThemeContext = createContext(); const ThemeProvider = ({ children }) => { // Step 2: Set up state to manage context value const [theme, setTheme] = useState('light'); const toggleTheme = () => { setTheme((prevTheme) => (prevTheme === 'light' ? 'dark' : 'light')); }; return ( // Step 3: Provide context value to children <ThemeContext.Provider value={{ theme, toggleTheme }}> {children} </ThemeContext.Provider> ); }; const ThemedComponent = () => { return ( // Step 4: Consume context value in a component <ThemeContext.Consumer> {({ theme, toggleTheme }) => ( <div> <h3> <strong>Explanation:</strong> </h3> <ol> <li> <strong>Create Context</strong>: createContext() creates a context object (ThemeContext).</li> <li> <strong>Provider</strong>: ThemeProvider component manages the theme state and provides the theme and toggleTheme function to the component tree via the Provider.</li> <li> <strong>Consumer</strong>: ThemedComponent uses the Context.Consumer to access the context value and display the current theme, as well as toggle it.</li> </ol> <hr> <h2> <strong>4. Using the useContext Hook (Functional Components)</strong> </h2> <p>In React 16.8+, you can use the useContext hook to consume context values in functional components. This is more convenient than using Context.Consumer and provides a cleaner syntax.</p> <h3> <strong>Example Using useContext Hook:</strong> </h3> <pre class="brush:php;toolbar:false">import React, { createContext, useState, useContext } from 'react'; // Create the context const ThemeContext = createContext(); const ThemeProvider = ({ children }) => { const [theme, setTheme] = useState('light'); const toggleTheme = () => { setTheme((prevTheme) => (prevTheme === 'light' ? 'dark' : 'light')); }; return ( <ThemeContext.Provider value={{ theme, toggleTheme }}> {children} </ThemeContext.Provider> ); }; const ThemedComponent = () => { // Use the useContext hook to consume the context const { theme, toggleTheme } = useContext(ThemeContext); return ( <div> <h3> <strong>Explanation:</strong> </h3> <ul> <li> <strong>useContext</strong> hook allows you to directly access the value provided by the context, making it simpler to use compared to Context.Consumer.</li> </ul> <hr> <h2> <strong>5. Best Practices for Using Context API</strong> </h2> <ul> <li> <strong>Use for Global State</strong>: Context should be used for data that needs to be accessible throughout your app, such as authentication status, themes, or language settings.</li> <li> <strong>Avoid Overuse</strong>: Overusing context for every small state can lead to performance issues. It’s best to use context for global or shared data and stick to local state for component-specific data.</li> <li> <strong>Context Provider Positioning</strong>: Place the Provider at the top level of your app (usually in the root component or an app layout) to make the context available to all nested components.</li> </ul> <hr> <h2> <strong>6. Example: Authentication Context</strong> </h2> <p>Here’s an example of how you might use the Context API for managing authentication status across your application:<br> </p> <pre class="brush:php;toolbar:false">import React, { createContext, useState, useContext } from 'react'; // Create the context const AuthContext = createContext(); const AuthProvider = ({ children }) => { const [user, setUser] = useState(null); const login = (userName) => setUser({ name: userName }); const logout = () => setUser(null); return ( <AuthContext.Provider value={{ user, login, logout }}> {children} </AuthContext.Provider> ); }; const Profile = () => { const { user, logout } = useContext(AuthContext); return user ? ( <div> <p>Welcome, {user.name}!</p> <button onClick={logout}>Logout</button> </div> ) : ( <p>Please log in.</p> ); }; const App = () => { const { login } = useContext(AuthContext); return ( <AuthProvider> <button onClick={() => login('John Doe')}>Login</button> <Profile /> </AuthProvider> ); }; export default App;
Context API は、React アプリ全体で状態を管理および共有するための強力なツールです。これにより、状態管理が簡素化され、プロップドリルの必要がなくなり、認証、テーマ、言語設定などのグローバル データの管理が容易になります。 createContext()、Provider、および useContext() を使用すると、アプリ全体にデータを渡すための効率的で保守可能な方法を作成できます。
以上がReact の Context API をマスターする: グローバル状態を共有するための包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。