В
React 18 при использовании режима
Strict Mode компонент монтируется
дважды в development среде - это ожидаемое поведение для выявления потенциальных проблем.
Вот несколько решений:
Самое простое - убрать StrictMode в index.js:
ReactDOM.createRoot(document.getElementById('root')).render(
<App />
);
Лучшее решение - оставить StrictMode и оптимизировать компонент с помощью useCallback:
const Button = ({info, id}) => {
const btn = useCallback((id) => {
setTodo(prevTodo => prevTodo.map(item => {
if(item[0] === id) {
return [...item.slice(0,6), !item[6], ...item.slice(7)];
}
return item;
}));
}, []);
return (
<button
className={`icon ${info ? 'icon-play' : 'icon-pause'}`}
onClick={() => btn(id)}
/>
);
}