文脈反応


誰が話しているreactjsでこの文脈は何ですか!したがって、文脈はあらゆるレベルで手動で小道具を通過しなければならないことなくコンポーネント木を通してデータを渡す方法を提供します
それで、我々はあらゆるレベルで小道具なしで構成木を通してデータを渡す方法です.まあそれは驚くべきではない!グローバル変数を持っているか、グローバルな小道具のような反応用語であるからです.例を挙げて、それについて良い考えを得るために反応で文脈を通って行きましょう.
そのような機能のための非常に単純な使用法は、あなたの反応アプリケーションのためのテーマ(暗いテーマ/光のテーマ)を使用している可能性があります(注:我々は定期的に変更されない状態のみのコンテキストを使用する必要があります).テーマがコンポーネントツリー内の任意のボタンをクリックしてその外観を変更するためにさまざまなコンポーネントに渡されることになっています.
今、我々は通常の小道具を使用している場合は、トラブルで終わるかもしれないデータを渡すために使用?次のようにして、コンポーネント内の主要コンポーネントを1つのアプリケーションと、その内部のカードセクションを使用します
React Documentation
ここで、メインのコンポーネントに保持された状態を持ち、次にカードのセクションで使用するようにしてください.そうすれば、メインからディスプレイまでそれを通過しなければならず、それからカードコンポーネントでそれを取得する必要があります.これは非常に基本的な構造であり、このアプローチは複雑な構造を持つWebアプリケーションでは実用的ではない.

それは反応の文脈が救助に来るところです.コンテキストは、この目的のために非常に単純な構造を提供します.コンテキストを使用する手順を参照してください
  • 私たちがグローバル小道具を格納するために使用するコンテキストを作成しなければならないかもしれません、そして、あなたは別々の構成要素でそれをしたいかもしれません.
  •  const ThemeContext = React.createContext(); 
    
  • 次に、アプリケーションのすべてのコンポーネントをラップするContextProviderコンポーネントを作成する必要があります.また、すべてのコンポーネントに渡されるすべての状態を格納する必要があります.
  • export const ThemeProvider = ({ children }) => {
      const [theme, setTheme] = useState('light');
      const [backgroundColor, setBackgroundColor] = useState('bg-gray-100');
      const [textColor, setTextColor] = useState('black');
      const [cardsBackgroundColor, setCardsBackgroundColor] = useState('bg-white');
      const toggleTheme = () => {
        if (theme === 'light') {
          window.localStorage.setItem('theme', 'dark');
          setThemeColor('dark');
        } else {
          window.localStorage.setItem('theme', 'light');
          setThemeColor('light');
        }
      };
    
     return (
        <ThemeContext.Provider
          value={{
            backgroundColor,
            textColor,
            cardsBackgroundColor,
            toggleTheme,
            theme,
          }}
        >
          {children}
        </ThemeContext.Provider>
      );
    };
    
  • コンテキストを使用するために、実際にはこれらのコンテキストの中ですべてをラップする必要があります.また、一般的には、reactdom内のアプリケーション全体をラップすることによって行います.render ()
  • 現在、すべての左が私たちがそれを使いたいかもしれない文脈を使用することです、しかし、我々がそれをする前に、我々が我々がそれを使いたいところで、我々は文脈を輸入する必要があります.すべてのものをシンプルに保つためには、カスタムフックを公開したいかもしれません.
  • export const useContextTheme = () => {
      return useContext(ThemeContext);
    };
    
  • 最終的に、我々は我々が我々が我々がそれを輸入する前のステップで我々によってつくられるカスタムフックを必要とするために、我々の作成された文脈を使いたいです、そして、我々は我々が望むが、それを使うために自由です!
  • コンテキストをインポートします
    import { useContextTheme } from 'components/ThemeContext';
    
    コンポーネント内で使用する
      const { toggleTheme, cardsBackgroundColor, theme } = useContextTheme();
    
    ハーレイ!あなたが作成し、独自のコンテキストを使用するために良いです!