Вот изображение демонстрационного приложения, каждый кружок представляет компонент React с отдельным стилем css. Этот блог не о css, подробности css о концентрических кругах см. Здесь. По аналогии, вложенные концентрические круги похожи на иерархическое дерево компонентов. Компонент приложения является родительским компонентом, внешний круг (синий) - дочерним по отношению к родительскому компоненту. Внешний круг имеет два внутренних круга (салатовый и желтый) или два дочерних компонента. В реакции информация передается от родителя к ребенку с помощью опор (бурение опор). С помощью React context api и теперь с React hooks useContext нам не нужно выполнять буровые работы.

css styles для всех кругов находится в файле CircleStyle, показанном ниже. Мы создаем styleContext, используя React.createContext. Экспортируем styleContext и styles

import React from "react";
export const styles = {
  outer: {
    backgroundColor: "blue",
    width: "400px",
    height: "400px",
    position: "relative",
    border: "1px solid black",
    borderRadius: "50%",
    margin: "auto",
  },
  inner1: {
    backgroundColor: "lime",
    top: "10%",
    left: "10%",
    width: "80%",
    height: "80%",
    position: "absolute",
    border: "1px solid black",
    borderRadius: "50%",
  },
  inner2: {
    backgroundColor: "yellow",
    top: "20%",
    left: "20%",
    width: "60%",
    height: "60%",
    position: "absolute",
    border: "1px solid black",
    borderRadius: "50%",
  },
};
export const styleContext = React.createContext(null);
export default { styleContext, styles };

Вот компонент приложения или родительский компонент, показанный ниже. Мы импортируем styleContext и styles. Мы передаем свойства styles дочернему компоненту (OuterCircle) и основным дочерним компонентам, используя styleContext.Provider value={styles}

import React from "react";
import OuterCircle from "./OuterCircle";
import { styleContext, styles } from "./CircleStyles";
import "./App.css";
function App() {
  return (
    <styleContext.Provider value={styles}>
      <h1>Draw Three Concentric Circles</h1>
      <OuterCircle />
    </styleContext.Provider>
  );
}
export default App;

Внутри OuterCircle находятся два внутренних круга или внутренние компоненты, показанные ниже. Каждый компонент подписывается, потребляет (данные) или получает доступ (контекст) с помощью ключевого слова useContext; astyle=useContext(styleContext). Стили css для OuterCircle доступны через astyle.outer

import React, { useContext } from "react";
import InnerCircle1 from "./InnerCircle1";
import InnerCircle2 from "./InnerCircle2";
import { styleContext } from "./CircleStyles";
function OuterCircle() {
  const astyle = useContext(styleContext);
  return (
    <div style={astyle.outer}>
      <InnerCircle1 />
      <InnerCircle2 />
    </div>
  );
}
export default OuterCircle;

вот компонент InnerCircle1, компонент InnerCircle2 аналогичен.

Мы подписываемся или потребляем styleContext данные, используя ключевое слово useContext; astyle=useContext(styleContext). Стили css для InnerCircle1 доступны через astyle.inner1

import React, { useContext } from "react";
import { styleContext } from "./CircleStyles";
function InnerCircle1() {
  const astyle = useContext(styleContext);
  return <div style={astyle.inner1}></div>;
}
export default InnerCircle1;

Пожалуйста, посмотрите мой github, чтобы найти файлы демонстрационного приложения.

Резюме

мы рассмотрели React Hooks; useContext