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