красит все элементы списка красным
import { useRef, useEffect } from "react";
const Item = ({ element, pushNode }) => {
  const node = useRef(null);
  useEffect(() => {
    pushNode(node);
  }, [node]);
  return <li ref={node}>{element}</li>;
};
const List = ({ elements, pushNode }) => {
  return (
    <ul>
      {elements.map((element) => (
        <Item element={element} pushNode={pushNode} />
      ))}
    </ul>
  );
};
const App = () => {
  const elements = ["one", "two", "three"];
  const nodes = [];
  const pushNode = (node) => nodes.push(node);
  const paintRed = (event) => {
    nodes.forEach((node) => {
      node.current.style.color = "red";
    });
  };
  return (
    <>
      <List elements={elements} pushNode={pushNode} />
      <button onClick={paintRed}>Paint it red</button>
    </>
  );
};
export default App;
elements - просто массив из стрингов которые как бы элементы
nodes - (будущий) массив рефов
pushNode - колбек который пушит в массив реф, его основная суть в том чтобы чистоту кода сохранять и не срать в глобальный скоуп из компонента
List - обычный ul который мапит elements создавая Item на каждой итерации
Item - обычный li внутри которого находится текст элемента из elements
Внутри Item создается реф на li, после того как компонент маунтится (чтобы сам реф появился) вызывается колбек который пушит реф в nodes, потом по нажатию кнопки средствами DOM’а красятся li’шки