Junior
Šta je useContext u Reactu?
sobes.tech АИ
Одговор од АИ
useContext - је хук у React-у који омогућава функционалним компонентама да се претплате на промене у контексту. Он пружа начин преноса података кроз дрво компоненти без потребе да експлицитно преносите пропсе на сваком нивоу.
Принцип рада:
- Креирање контекста: Користи се
React.createContext()за креирање објекта контекста. Овај објекат садржи Provider и Consumer (или се користиuseContextу функционалним компонентама). - Обезбеђивање вредности: Provider компонента контекста обавија дрво компоненти којима је потребан приступ вредности. Преко пропса
valueсе преноси вредност која ће бити доступна свим претплаћеним компонентама. - Добијање вредности:
useContext(MyContext)се позива унутар функционалне компоненте, где јеMyContextпретходно креирани контекст. Хук враћа тренутну вредност контекста. Када се вредност контекста промени, компонентa која користиuseContextаутоматски се поново рендерује.
Предности:
- Лако преношење података: Уклања потребу за "протаскањем" пропса кроз више посредничких компоненти (
prop drilling). - Глобално стање: Погодно за управљање глобалним стањем апликације (нпр. тема, аутентикација, локализација).
- Производљивост: React оптимизује рендеровање компоненти које користе
useContext, рендерујући само оне које су претплаћене на промене тог контекста.
Недостаци:
- Тешкоће у дебаговању: Прати од кога долази вредност контекста може бити сложеније у поређењу са пропсима.
- Производљивост при честим ажурирањима: Ако се вредност контекста често ажурира, то може довести до честих поновних рендеровања свих претплаћених компоненти.
Пример:
import React, { createContext, useContext } from 'react';
// 1. Креирање контекста
const ThemeContext = createContext('light');
// Компонента-продавалац
function ThemeProvider({ children }) {
const theme = 'dark'; // Пример вредности
return <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>;
}
// Компонента која користи контекст
function ThemedComponent() {
// 3. Добијање вредности контекста
const theme = useContext(ThemeContext);
return <div style={{ background: theme === 'dark' ? '#333' : '#fff', color: theme === 'dark' ? '#fff' : '#000' }}>Тема: {theme}</div>;
}
// Примена
function App() {
return (
<ThemeProvider> {/* 2. Обезбеђивање вредности */}
<ThemedComponent />
</ThemeProvider>
);
}
export default App;