この記事では、アプリから React.Context を削除する方法と、削除する動機を見つける方法を見ていきます。
この記事にたどり着いた方は、おそらく React に精通しており、React.Context をすでに使用した経験があるかもしれませんが、そうでない場合でも、とにかくお気軽に読んで、興味があるかもしれない人々と共有してください。
コンテキストは可読性を低下させ、アプリを複雑にし、制限します。
この基本的な例を見てください:
<ThemeContext.Provider value={theme}> <AuthContext.Provider value={currentUser}> <ModalContext.Provider value={modal}> <VolumeContext.Provider value={volume}> <RouterProvider router={router} /> </VolumeContext.Provider> </ModalContext.Provider> </AuthContext.Provider> </ThemeContext.Provider>
あまりにも分かりやすくて信頼できるように見えませんか?
コンテキストを使用する場合に発生する可能性のある問題をいくつか示します:
面白い事実: 有名な「約束地獄」は似ている ?♂️
loadClients() .then((client) => { return populate(client) .then((clientPopulated) => { return commit(clientPopulated); }); });ログイン後にコピー
代わりにフックを作成します。
上記の例の ThemeContext をカスタム useTheme フックに置き換えてみましょう:
import { useAppEvents } from 'use-app-events'; const useTheme = () => { const [theme, setTheme] = useState('dark'); /** Set up communication between the instances of the hook. */ const { notifyEventListeners, listenForEvents } = useAppEvents(); listenForEvents('theme-update', (themeNext: string) => { setTheme(themeNext); }); const updateTheme = (themeNext: string) => { setTheme(themeNext); notifyEventListeners('theme-update', themeNext); }; return { theme, updateTheme, }; };
use-app-events という npm パッケージを使用して、useTheme フックのすべてのインスタンスが通信してテーマの状態を同期できるようにしました。これにより、アプリ内で useTheme が複数回呼び出されたときに、テーマの値が同じになることが保証されます。
さらに、use-app-events パッケージのおかげで、テーマはブラウザのタブ間でも同期されます。
この時点では、useTheme フックをアプリ内のどこでも使用して現在のテーマを取得して更新できるため、ThemeContext は必要なくなりました。
const App = () => { const { theme, updateTheme } = useTheme(); updateTheme('light'); // Output: <div>Current theme: light</div> return <div>Current theme: {theme}</div>; }
このアプローチの長所は何ですか:
React.Context は少し前までは確かに強力なツールでしたが、use-app-events パッケージと組み合わせて適切に実装されていれば、フックはアプリのグローバルな状態を管理するためのより制御された信頼性の高い方法を提供します。
以上がReact.Context を使用せず、フックを作成してください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。