Проблема, с которой вы столкнулись, связана с тем, что вы используете одно состояние (`icon`) для всех кнопок. Когда вы меняете состояние `icon`, оно изменяется для всех кнопок одновременно, поскольку все они ссылаются на одно и то же состояние.
Чтобы исправить это, вам нужно хранить состояние отдельно для каждой кнопки или элемента массива `todo`. Один из подходов — изменить структуру вашего состояния, чтобы оно хранило или индикатор состояния для каждой кнопки. Например, вы можете использовать объект или массив, где каждый элемент будет хранить состояние отдельной кнопки.
Вот пример, как это можно реализовать:
```javascript
import React, { useState } from 'react';
const App = () => {
// Предположим, ваш массив todo выглядит примерно так:
const [todo, setTodo] = useState([
{ id: 1, completed: false },
{ id: 2, completed: false },
{ id: 3, completed: false },
]);
const toggleIcon = (id) => {
setTodo((prevTodo) =>
prevTodo.map((item) =>
item.id === id ? { ...item, completed: !item.completed } : item
)
);
};
return (
<div>
{todo.map((item) => (
<button
key={item.id}
className={`icon ${item.completed ? 'icon-pause' : 'icon-play'}`}
onClick={() => toggleIcon(item.id)}
>
{/* Вы можете добавить здесь содержимое кнопки */}
</button>
))}
</div>
);
};
export default App;
```
В этом примере мы используем массив объектов `todo`, где каждый объект содержит свойство `completed`, которое указывает на состояние кнопки. При нажатии на кнопку для конкретного элемента мы изменяем его состояние, не влияя на другие кнопки.
Таким образом, каждая кнопка будет отображать свое собственное состояние, и нажатие на одну кнопку не повлияет на состояния других кнопок.