React'теги useContext контекст хуку

Бул сабакта биз контекст менен иштоону улантабыз. Азыр компоненттер дарагынын курабыз. Баштоо үчүн өзүнчө файлда React компонентин түзөбүз BigBox:

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

Аны импорттоп, башкы компонентибиз Appге жайгаштырабыз:

App.jsximport BigBox from './BigBox';

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

Түшүнүктүү болушу үчүн дивтерди бир аз стилдештиребиз. Бул үчүн styles.css файлын түзөбүз:

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

Аны App.jsге импорттоону унутпайлы:

App.jsximport './styles.css';

Азыр өзүнчө файлда MiddleBox компонентин түзөбүз:

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

Жана аны чоң кутучага BigBoxга салабыз:

BigBox.jsximport MiddleBox from './MiddleBox';

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

Кичинекей кутуча менен SmallBox менен дагы ушундай кылабыз:

SmallBox.jsxfunction SmallBox() {
  return (
    <p>Мен ... </p>
  );
}

Эки ушундай кутучаны MiddleBoxга жайгаштырабыз:

MiddleBox.jsximport SmallBox from './SmallBox';

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

Даракты курдук. Эми биз Appтен, мисалы, SmallBoxка 'small box :)' сап маанисин бергибиз келет, пропстарды колдонбой, контекстти колдонуп (балким биздин кутуча тиркемесиз чоң өлчөмгө чейин өсөт).

Контекст файлын MyContext.js биз мурунку сабакта түзгөн бүлөк жана туташтырганбыз.

Кийинки кадам, биз кыла турган - BigBoxты контекст провайдерине ороп коёбуз, ал биздин контекст объектибиздин MyContext касиети болуп саналат. Эми ушул курулмага киргизилген бардык компоненттер (жана бул BigBoxка киргизилген бардык кутучалар) контекстке кирип, анын өзгөрүүлөрүнө жазыла алат. Контексттин мааниси катары биз каалаган 'small box :)' беребиз:

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

Эми контексттин маанисин окушубуз калды. Биз аны SmallBoxта колдонууну кааладык, демек ал жерге контекст файлын MyContext.js жана useContext хукун импорттойбуз:

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

useContext жардамы менен контексттин маанисин name өзгөрмөсүнө окуйбуз:

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

Биз SmallBoxты бул контекстке жазылдык жана, эгер ал өзгөрсө, бул компонент дагы жаңыртылат.

Жана, акырында, name өзгөрмөсүнүн маанисин үч чекиттин ордуна коёбуз:

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

Бош компонентте Appте Parent компонентин түзүңүз, анда Daughter компонентин, ал эми Daughterте Grandson компонентин. Контекстти колдонуп, Appтен жаштын маанисин 42 бергиле, ал эми useContext жардамы менен аны Daughter компонентинде көрсөтүңүз.

Задание 2

Эми Grandson компонентинде жаштын маанисин көрсөтүңүз, бирок 2ге бөлүнгөн.