Dalam React, mengurus data antara komponen adalah penting, terutamanya dalam aplikasi yang lebih besar di mana berbilang komponen memerlukan akses kepada data yang sama. Penggerudian prop—melalui prop ke bawah berbilang peringkat pokok komponen—boleh menjadi menyusahkan dengan cepat. Di sinilah cangkuk useContext React bersinar. useContext membolehkan anda berkongsi data merentas komponen tanpa menghantar prop secara manual, menjadikannya alat yang tidak ternilai untuk pengurusan negeri.
Dalam artikel ini, kami akan mulakan dengan penerangan terperinci tentang useContext, sintaksnya dan faedahnya. Kemudian, kami akan mengukuhkan pemahaman ini dengan membina dua projek mini:
Menjelang akhir tutorial ini, anda akan dilengkapi dengan baik untuk menggunakan useContext dengan yakin dalam mana-mana projek React.
useContext ialah cangkuk React yang membenarkan komponen melanggan konteks secara langsung. Ia membantu mengelakkan kerumitan penggerudian prop dengan membolehkan komponen mengakses data global daripada pembekal terdekat di atasnya dalam pepohon komponen.
Berikut ialah sintaks asas untuk mencipta dan menggunakan konteks:
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> ); }
Dalam contoh ini:
Ini merangkumi perkara asas. Sekarang, mari kita selami projek untuk menggunakan pengetahuan ini dalam senario praktikal.
Projek pertama kami ialah penukar tema ringkas yang akan menunjukkan cara useContext boleh digunakan untuk mengurus keadaan aplikasi global untuk tema.
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>; }
Di sini, ThemeContext menyediakan dua nilai: tema semasa dan fungsi untuk menogolnya. Pembekal membungkus komponen apl, menjadikan tema dan fungsi togol tersedia secara global.
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> ); }
Kini, anda boleh bertukar-tukar antara tema terang dan gelap dengan mengklik butang, dengan status tema dipaparkan di sebelah. Projek ini menunjukkan cara useContext membenarkan berbilang komponen berkongsi dan bertindak balas terhadap perubahan keadaan global.
Untuk projek kedua, mari bina apl ringkas yang menjejak status pengesahan pengguna menggunakan 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>; }
Kini, anda mempunyai apl status pengesahan ringkas yang mana butang log masuk dan log keluar mengemas kini status pengguna merentas apl. Projek ini menunjukkan cara useContext boleh mengendalikan keadaan merentas aplikasi dalam senario dunia sebenar.
Dengan kedua-dua projek ini, anda telah melihat cara useContext memudahkan perkongsian data antara komponen tanpa memerlukan penggerudian prop. Projek penukar tema dan status pengesahan memberikan cerapan praktikal dalam mengurus keadaan global dengan berkesan. Sama ada anda menogol tema atau mengendalikan pengesahan pengguna, useContext menyediakan alat yang berkuasa untuk membina aplikasi yang cekap dan teratur.
Atas ialah kandungan terperinci useContext: React Hooks. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!