React では、特に複数のコンポーネントが同じデータにアクセスする必要がある大規模なアプリケーションでは、コンポーネント間のデータ管理が不可欠です。プロップのドリル作業 (コンポーネント ツリーの複数のレベルにプロップを渡す) は、すぐに面倒になる可能性があります。ここで React の useContext フックが威力を発揮します。 useContext を使用すると、props を手動で渡さずにコンポーネント間でデータを共有できるため、状態管理にとって非常に貴重なツールになります。
この記事では、useContext、その構文、およびその利点の詳細な説明から始めます。次に、2 つのミニプロジェクトを構築して、この理解を確実にします。
このチュートリアルが終わるまでに、React プロジェクトで自信を持って useContext を使用できるようになります。
useContext は、コンポーネントがコンテキストを直接サブスクライブできるようにする React フックです。コンポーネントがコンポーネント ツリー内でその上にある最も近いプロバイダーからグローバル データにアクセスできるようにすることで、プロップ ドリルの煩わしさを回避できます。
コンテキストを作成および使用するための基本的な構文は次のとおりです。
import React, { useContext, createContext } from 'react'; const MyContext = createContext(defaultValue); // Step 1: Create a context function MyComponent() { const contextValue = useContext(MyContext); // Step 2: Use the context return <div>{contextValue}</div>; }
import React, { useContext, createContext } from 'react'; const ThemeContext = createContext('light'); // default theme is light function ThemeProvider({ children }) { return <ThemeContext.Provider value="dark">{children}</ThemeContext.Provider>; } function DisplayTheme() { const theme = useContext(ThemeContext); // Consuming the context return <p>The current theme is {theme}</p>; } function App() { return ( <ThemeProvider> <DisplayTheme /> </ThemeProvider> ); }
この例では:
これは基本をカバーしています。ここで、この知識を実際のシナリオに適用するためのプロジェクトに飛び込んでみましょう。
私たちの最初のプロジェクトは、useContext を使用してテーマのグローバル アプリケーション状態を管理する方法を示す単純なテーマ スイッチャーです。
import React, { useContext, createContext } from 'react'; const MyContext = createContext(defaultValue); // Step 1: Create a context function MyComponent() { const contextValue = useContext(MyContext); // Step 2: Use the context return <div>{contextValue}</div>; }
ここで、ThemeContext は 2 つの値を提供します: 現在のテーマとそれを切り替える関数です。プロバイダーはアプリのコンポーネントをラップし、テーマと切り替え機能をグローバルに利用できるようにします。
import React, { useContext, createContext } from 'react'; const ThemeContext = createContext('light'); // default theme is light function ThemeProvider({ children }) { return <ThemeContext.Provider value="dark">{children}</ThemeContext.Provider>; } function DisplayTheme() { const theme = useContext(ThemeContext); // Consuming the context return <p>The current theme is {theme}</p>; } function App() { return ( <ThemeProvider> <DisplayTheme /> </ThemeProvider> ); }
import React, { createContext, useContext, useState } from 'react'; const ThemeContext = createContext(); export function ThemeProvider({ children }) { const [theme, setTheme] = useState('light'); const toggleTheme = () => setTheme(theme === 'light' ? 'dark' : 'light'); return ( <ThemeContext.Provider value={{ theme, toggleTheme }}> {children} </ThemeContext.Provider> ); }
ボタンをクリックすると、テーマのステータスが横に表示され、明るいテーマと暗いテーマを切り替えることができます。このプロジェクトは、useContext を使用して、複数のコンポーネントがグローバルな状態の変更を共有し、それに反応する方法を示します。
2 番目のプロジェクトでは、useContext を使用してユーザーの認証ステータスを追跡する単純なアプリを構築しましょう。
function ThemeToggler() { const { theme, toggleTheme } = useContext(ThemeContext); // Access context values return ( <button onClick={toggleTheme}> Switch to {theme === 'light' ? 'dark' : 'light'} mode </button> ); } function DisplayTheme() { const { theme } = useContext(ThemeContext); return <p>Current Theme: {theme}</p>; }
function App() { return ( <ThemeProvider> <DisplayTheme /> <ThemeToggler /> </ThemeProvider> ); } export default App;
import React, { createContext, useContext, useState } from 'react'; const AuthContext = createContext(); export function AuthProvider({ children }) { const [isAuthenticated, setIsAuthenticated] = useState(false); const login = () => setIsAuthenticated(true); const logout = () => setIsAuthenticated(false); return ( <AuthContext.Provider value={{ isAuthenticated, login, logout }}> {children} </AuthContext.Provider> ); }
function LoginButton() { const { login } = useContext(AuthContext); // Access login function return <button onClick={login}>Login</button>; } function LogoutButton() { const { logout } = useContext(AuthContext); // Access logout function return <button onClick={logout}>Logout</button>; }
これで、ログイン ボタンとログアウト ボタンによってアプリ全体のユーザーのステータスが更新される、シンプルな認証ステータス アプリが完成しました。このプロジェクトは、実際のシナリオで useContext がアプリケーション全体の状態をどのように処理できるかを示します。
これら 2 つのプロジェクトでは、useContext がプロップのドリルを必要とせずにコンポーネント間のデータ共有を簡素化する方法を理解しました。テーマ スイッチャーと認証ステータス プロジェクトは、グローバル状態を効果的に管理するための実践的な洞察を提供します。テーマを切り替える場合でも、ユーザー認証を処理する場合でも、useContext は効率的で組織化されたアプリケーションを構築するための強力なツールを提供します。
以上がuseContext: React フックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。