Не очень хорошая идея хранить jsx в таком состоянии, как сказал Шон Яп. Но в целом с javascript это плохая практика. В этом случае это сложнее, чем нужно. Хорошей идеей является сделать данные как можно более простыми и легкими, а затем добавлять их при необходимости. В этом примере есть несколько улучшений, которые вы можете сделать
// You used both function App() & const onClick = () =>
// Best to choose one and stick with it.
const App = () => {
const [items, setItems] = useState([]);
const onClick = () => {
setItems([
...items,
items.length
]);
};
return (
<div className="App" onClick={onClick}>
<h1>Hello CodeSandbox</h1>
// Instead use a map to render items, you also don't need another function for this
{items.map((item, index) => {
console.log("rendered item with index: ", index)
return <h2 key={index}>{index}</h2>
})}
<h2>Start editing to see some magic happen!</h2>
</div>
);
}
Также никогда не храните ключ элемента, ключ элемента которого основан на индексе. Хотя они могут выглядеть одинаково, если вы удалите элемент в своем примере, а затем добавите новый элемент, у вас будет ошибка. [1, 3, 3]
сделал бы ошибку для вас. [1, 3, 3]
использование индекса массива в качестве ключа не приведет к ошибке.
Надеюсь, что это поможет и удачного кодирования:)