<div id="app"></div>
body {
  padding: 20px;
}

.input-group {
  width: 300px;
}

.search-group {
  display: flex;
  height: 38px;
}

ul, ol {
  list-style: none;
}

.fw-bolder {
  padding-top: 24px;
  padding-left: 0;
}
import { useState, useContext, createContext } from "https://esm.sh/react";
import ReactDOM from "https://esm.sh/react-dom";

const initialState = {
  state: 'Some data...'
};

// usually export the context to be available for components
const CustomContext = createContext(initialState);

function App() {
  // parent
  return (
    <CustomContext.Provider value={initialState}>
      <ChildA />
    </CustomContext.Provider>
  )
}

function ChildA(props) {
  // child
  return (
      <ChildB />
  );
}

function ChildB(props) {
  // grandChild
  const {state} = useContext(CustomContext);
  return (
      <div>{state}</div>
  );
}

ReactDOM.render(<App />, document.querySelector("#app"));
View Compiled

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.0.2/css/bootstrap.min.css

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/react/18.2.0/umd/react.production.min.js
  2. https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.2.0/umd/react-dom.production.min.js