React Context
React Context
I React er Context en mekanisme, der gør det muligt at dele data mellem komponenter i en applikation uden at skulle videresende props manuelt gennem hvert niveau af komponenttræet. Det er især nyttigt, når du har data eller tilstand, der skal være tilgængelig for mange komponenter på forskellige niveauer i træet.
Hvordan fungerer Context i React?
- Oprettelse af Context: Du bruger React.createContext() til at oprette en Context.
Denne metode genererer to ting:
- En Provider komponent, som bruges til at levere data.
- En Consumer, der bruges af komponenter til at få adgang til data.
1
const MyContext = React.createContext();
- Provider:
- Context’s Provider komponent bruges til at pakke de komponenter, der skal have adgang til dataene.
- Du leverer data til alle child components via value-proppen.
1
2
3
<MyContext.Provider value={someData}>
<ChildComponent />
</MyContext.Provider>
- Consumer:
- En Consumer bruges til at få adgang til data fra Context.
- Det kan gøres enten med MyContext.Consumer eller React’s useContext hook (anbefalet i moderne React).
1
2
3
<MyContext.Consumer>
{value => <div>{value}</div>}
</MyContext.Consumer>
Eller ved brug af useContext:
1
2
3
import { useContext } from 'react';
const value = useContext(MyContext);
Eksempel på brug af Context
- Opret Context:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import React, { createContext, useState } from 'react';
const ThemeContext = createContext();
const ThemeProvider = ({ children }) => {
const [theme, setTheme] = useState('light');
return (
<ThemeContext.Provider value={{ theme, setTheme }}>
{children}
</ThemeContext.Provider>
);
};
export { ThemeContext, ThemeProvider };
- Brug Context i en komponent:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import React, { useContext } from 'react';
import { ThemeContext } from './ThemeContext';
const ThemeToggler = () => {
const { theme, setTheme } = useContext(ThemeContext);
return (
<button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
Skift tema til {theme === 'light' ? 'dark' : 'light'}
</button>
);
};
export default ThemeToggler;
- Indpak applikationen med Provider:
1
2
3
4
5
6
7
8
9
10
11
12
import React from 'react';
import ReactDOM from 'react-dom';
import { ThemeProvider } from './ThemeContext';
import ThemeToggler from './ThemeToggler';
const App = () => (
<ThemeProvider>
<ThemeToggler />
</ThemeProvider>
);
ReactDOM.render(<App />, document.getElementById('root'));
Hvornår bruges Context?
Context bør bruges, når:
- Data skal være tilgængelige for mange komponenter uden at bruge “prop-drilling”.
- Eksempler på typiske brugsscenarier:
- Temaer (f.eks. lys/mørk tilstand).
- Sprogindstillinger.
- Autentificeringsoplysninger (f.eks. brugerstatus eller token).
Begrænsninger ved Context
- Ydelsesproblemer:
- Hvis Context ændrer sig ofte, kan det medføre unødvendige genrenderinger af alle forbrugende komponenter.
- Overvej at memoize værdier med React.memo eller bruge Redux/Zustand for mere komplekse tilstande.
- Overforbrug:
- Brug ikke Context til alt. Hvis dataene kun skal deles mellem få nært beslægtede komponenter, kan props være tilstrækkeligt.
Context er en kraftfuld måde at håndtere delte data i React, men bør bruges med omtanke for at undgå unødig kompleksitet eller ydeevneproblemer.
This post is licensed under CC BY 4.0 by the author.