Junior
რა არის useContext React-ში?
sobes.tech AI
პასუხი AI-სგან
useContext - ეს არის ჰუკი React-ში, რომელიც საშუალებას აძლევს ფუნქციურ კომპონენტებს გამოწერონ კონტექსტის ცვლილებებზე. ის უზრუნველყოფს მონაცემების გადაცემის გზას კომპონენტების ხეზე, გარეშე რომ აშკარად გადმოსცეთ პროპსები თითოეულ დონეზე.
მუშაობის პრინციპი:
- კონტექსტის შექმნა: გამოიყენება
React.createContext()კონტექსტის ობიექტის შესაქმნელად. ამ ობიექტში შედის Provider და Consumer (ანuseContextგამოყენება ფუნქციურ კომპონენტებში). - მნიშვნელობის მიწოდება: კონტექსტის Provider ირგვლივ აყრის კომპონენტების ხეს, რომელთაც სურთ მნიშვნელობის მიღება.
valueპროპით გადაეცემა მნიშვნელობა, რომელიც ყველას ხელმისაწვდომი იქნება. - მნიშვნელობის მიღება:
useContext(MyContext)იძახება ფუნქციურ კომპონენტში, სადაცMyContextარის ადრე შექმნილი კონტექსტი. ჰუკი აბრუნებს მიმდინარე მნიშვნელობას. როდესაც კონტექსტის მნიშვნელობა იცვლება, ის ავტომატურად იწერება מחדש.
უპირატესობები:
- მონაცემების მარტივი გადაცემა: ამცირებს საჭიროებას
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;