useContext
すべてのレベルで手動で小道具を渡すことなく、コンポーネントツリー全体でデータを消費および共有できるReactが提供するフックです。このフックは、「プロップ掘削」を避けるのに特に便利です。これは、大規模なアプリケーションでは面倒で管理が難しくなる可能性のあるコンポーネントの複数のレイヤーに小道具を渡すプロセスです。
useContext
使用すると、 React.createContext()
を使用してコンテキストを作成し、 useContext(Context)
を使用して、機能コンポーネント内のコンテキストをサブスクライブできます。コンテキストの値は、コンポーネントツリーの一部をContext.Provider
で巻き付け、現在の値をプロップとして渡すことで更新できます。
useContext
をセットアップして使用する方法の基本的な例を次に示します。
<code class="javascript">// Create a Context const ThemeContext = React.createContext('light'); // Use the Context in a component function ThemedButton() { const theme = useContext(ThemeContext); return <button style="{{background:" theme>Themed Button</button>; } // Provide a value for the Context function App() { return ( <themecontext.provider value="dark"> <themedbutton></themedbutton> </themecontext.provider> ); }</code>
Reactで国家管理にuseContext
使用すると、いくつかの利点があります。
useContext
の主な利点の1つは、プロップ掘削の削減または排除です。これにより、データを使用していない中間コンポーネントにプロップを渡す必要がなくなるため、コードがクリーンになり、メンテナンスが容易になります。useContext
使用すると、コンポーネントの階層全体に州の不必要なコピーを作成することなく、それを必要とするコンポーネントから国家の集中化とアクセスを可能にすることができます。useContext
使用するコンポーネントは、州の直接消費者になる可能性があるため、コンテキストからディスパッチ関数またはセッター関数にアクセスできる限り、その状態を更新する際の直接的なアクターにすることもできます。useContext
すると、コンポーネントは小道具であまり散らかっており、よりクリーンで読みやすいコードにつながります。また、アプリケーションが成長するにつれて、アプリケーションを変更して維持しやすくなります。 useContext
、いくつかの方法でコンポーネントの再レンダーのパフォーマンスを向上させることができます。
useContext
を使用する場合、コンテキストが実際にコンテキストを消費するコンポーネントのみが、コンテキストが変更されると再レンダリングされます。これは、プロップを使用していなくても、プロップのパス内のすべてのコンポーネントが潜在的に再レンダリングする可能性のあるプロップ掘削とは対照的です。React.memo
を提供し、クラスコンポーネントにはPureComponent
提供します。これにより、不必要な再レンダーを防ぐことができます。 useContext
で使用する場合、これらのコンポーネントは、すべての親レンダリングではなく、小道具またはコンテキストが変更された場合にのみ再レンダリングするように最適化できます。Context.Provider
に包まれているかを慎重に管理することにより、状態の変更に応じてどのコンポーネントを再レンダリングするかを制御できます。このターゲットを絞った再レンダリングは、大規模なアプリケーションのパフォーマンスを大幅に改善できます。useContext
グローバルデータへの直接アクセスを提供するため、コンポーネントは不必要な計算とプロップ掘削中に発生する可能性のあるデータ変換をスキップできます。 useContext
とuseState
などの他のフックを組み合わせることで、Reactでより堅牢で柔軟な状態管理ソリューションを作成できます。これらを一緒に使用する方法の例は次のとおりです。
<code class="javascript">// Create a context for the theme const ThemeContext = React.createContext(); // Create a provider component that uses useState to manage the theme state function ThemeProvider({ children }) { const [theme, setTheme] = useState('light'); const toggleTheme = () => { setTheme(prevTheme => prevTheme === 'light' ? 'dark' : 'light'); }; return ( <themecontext.provider value="{{" theme toggletheme> {children} </themecontext.provider> ); } // Consume the context in a component function ThemedButton() { const { theme, toggleTheme } = useContext(ThemeContext); return ( <button onclick="{toggleTheme}" style="{{background:" theme> Toggle Theme </button> ); } // Use the provider in the root of your application function App() { return ( <themeprovider> <themedbutton></themedbutton> </themeprovider> ); }</code>
この例では、 useState
ThemeProvider
内のテーマの状態を管理し、 useContext
使用すると、 ThemedButton
などのコンポーネントがその状態にアクセスして対話できます。このパターンは、複数のコンテキストを組み合わせるか、 useContext
と一緒に還元剤( useReducer
)などのより高度なパターンを使用することにより、ネストされたオブジェクトや配列などのより複雑な状態構造を管理するために拡張できます。
useContext
useState
と統合することにより、個々のコンポーネントが独自の地域の状態を管理できるようにしながら、アプリケーションの状態を集中させ続けるスケーラブルな状態管理ソリューションを作成できます。このアプローチは、グローバルおよび地方の両方の州管理をサポートしており、複雑な反応アプリケーションの構築と維持を容易にします。
以上がusecontextとは何ですか?コンポーネント間で状態を共有するためにどのように使用しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。