Reactda useContext Kontekst Huki

Ushbu darsda biz kontekst bilan ishlashni davom ettiramiz. Endi komponentlar daraxtini quramiz. Boshlanish uchun alohida faylda BigBox React komponentini yaratamiz:

BigBox.jsxfunction BigBox() {
  return (
    <p>bigbox</p>
  );
}

Uni import qilamiz va asosiy App komponentimizga joylashtiramiz:

App.jsximport BigBox from './BigBox';

function App() {
  return (
    <BigBox />
  );
}

Yanada aniqroq qilish uchun divlarni biroz uslublashtiramiz. Buning uchun styles.css faylini yaratamiz:

styles.cssdiv {
  border: 1px solid blue;
  margin: 10px;
  text-align: center;
  max-width: 300px;
}

Uni App.js ga import qilishni unutmaymiz:

App.jsximport './styles.css';

Endi alohida faylda MiddleBox komponentini yaratamiz:

MiddleBox.jsxfunction MiddleBox() {
  return (
    <p>middlebox</p>
  );
}

Va uni katta qutining ichiga BigBox qo'yamiz:

BigBox.jsximport MiddleBox from './MiddleBox';

function BigBox() {
  return (
    <div>
      <MiddleBox />
    </div>
  );
}

Kichkina quticha SmallBox bilan ham xuddi shu narsani qilamiz:

SmallBox.jsxfunction SmallBox() {
  return (
    <p>Men ... </p>
  );
}

MiddleBox ga ikkita shunday qutichani joylashtiramiz:

MiddleBox.jsximport SmallBox from './SmallBox';

function MiddleBox() {
  return (
    <div>
      <SmallBox />
      <SmallBox />
    </div>
  );
}

Biz daraxtni quradik. Endi esa biz App dan, aytaylik, SmallBox ga 'small box :)' satr qiymatini prop-lardan foydalanmasdan, kontekst yaratish orqali uzatishni xohlaymiz (go'yo bizning quticha ilovamiz ulkan o'lchamlarga yetadi).

MyContext.js kontekst faylini biz oldingi darsda yaratgan va ulagan edik.

Keyingi qadam, biz qiladigan narsa - BigBox ni kontekst provayderi ga o'rab qo'yamiz, bu bizning kontekst obyekti MyContext ning xususiyati. Endi ushbu konstruksiyaga o'ralgan barcha komponentlar (va bu BigBox ga joylashtirilgan barcha qutichalar) kontekstga kirish imkoniyatiga ega bo'ladilar va unga obuna bo'lishlari mumkin. Kontekst qiymati sifatida biz xohlagan 'small box :)' ni uzatamiz:

App.jsxfunction App() {
  return (
    <MyContext.Provider value="small box :)">
      <BigBox />
    </MyContext.Provider>
  );
}

Va endi kontekst qiymatini o'qish qoldi. Biz uni SmallBox da ishlatmoqchi edik, shuning uchun u erga MyContext.js kontekst faylini va useContext hukini import qilamiz:

SmallBox.jsximport { useContext } from 'react';
import { MyContext } from './MyContext.js';

useContext yordamida kontekst qiymatini name o'zgaruvchisiga o'qiymiz:

SmallBox.jsxfunction SmallBox() {
  const name = useContext(MyContext);
  
  return (
    <div>
      <p>Men ... </p>
    </div>
  );
}

Biz SmallBox ni ushbu kontekstga obuna qildik va agar u o'zgarsa, ushbu komponent ham yangilanadi.

Va nihoyat, name o'zgaruvchisi qiymatini uch nuqta o'rniga qo'yamiz:

SmallBox.jsxfunction SmallBox() {
  const name = useContext(MyContext);
  
  return (
    <div>
      <p>Men {name} </p>
    </div>
  );
}
Задание 1

Bo'sh App komponentida Parent komponentini yarating, unda Daughter komponentini, Daughter da esa Grandson komponentini yarating. Kontekstdan foydalanib, App dan 42 yosh qiymatini uzating va useContext yordamida uni Daughter komponentida chiqaring.

Задание 2

Endi esa Grandson komponentida yosh qiymatini chiqaring, lekin 2 ga bo'lingan holda.