Dalam artikel ini, kita akan melihat cara untuk menyingkirkan React.Context dalam apl anda dan mencari motivasi untuk berbuat demikian.
Anda mungkin biasa dengan React dan mungkin sudah mempunyai pengalaman dengan React.Konteks jika anda sampai di artikel ini, tetapi jika tidak, sila baca juga dan kongsi dengan orang yang mungkin berminat.
Konteks merendahkan kebolehbacaan, menjerat dan menyekat apl.
Cukup lihat contoh asas ini:
<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>
Nampak tidak terlalu mudah difahami dan boleh dipercayai, bukan?
Berikut ialah beberapa isu yang berpotensi apabila menggunakan konteks:
Fakta menggembirakan: "janji-neraka" yang terkenal kelihatan serupa ?♂️
loadClients() .then((client) => { return populate(client) .then((clientPopulated) => { return commit(clientPopulated); }); });Salin selepas log masuk
Buat cangkuk sebaliknya.
Mari kita gantikan ThemeContext daripada contoh di atas dengan cangkuk useTheme tersuai:
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, }; };
Kami menggunakan pakej npm yang dipanggil use-app-events untuk membenarkan semua kejadian cangkuk useTheme berkomunikasi untuk menyegerakkan keadaan tema mereka. Ia memastikan bahawa nilai tema akan sama apabila useTheme dipanggil beberapa kali di sekeliling apl.
Selain itu, terima kasih kepada pakej use-app-events, tema akan disegerakkan walaupun antara tab penyemak imbas.
Pada ketika ini, ThemeContext tidak lagi diperlukan kerana cangkuk useTheme boleh digunakan di mana-mana dalam apl untuk mendapatkan tema semasa dan mengemas kininya:
const App = () => { const { theme, updateTheme } = useTheme(); updateTheme('light'); // Output: <div>Current theme: light</div> return <div>Current theme: {theme}</div>; }
Apakah kebaikan pendekatan:
React.Context ialah alat yang berkuasa suatu masa dahulu yang pasti, tetapi cangkuk menyediakan cara yang lebih terkawal dan boleh dipercayai untuk mengurus keadaan global apl anda jika dilaksanakan dengan betul bersama-sama dengan pakej use-app-events.
Atas ialah kandungan terperinci Jangan gunakan React.Context, buat cangkuk.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!