В вашем текущем примере оба элемента списка находятся в одном и том же состоянии.
Поэтому при каждом рендеринге переключение состояния будет отражать оба <li/>
элемента.
Требуется каждый элемент списка иметь свое собственное состояние active
.
Обратите внимание, что у вас есть некоторые ошибки, такие как строка 'false'
, сравнивающая className
с setActive
функцией и не имеющая класс noactive
CSS.
import React, { useState } from 'react';
import './styles.css';
const creditValues = [
{
month: 6,
monthly: 102.72,
interest: 24.36,
cost: 616.32,
total: 591.96,
},
{
month: 12,
monthly: 53.15,
interest: 24.36,
cost: 616.32,
total: 591.96,
},
];
const Item = ({ children }) => {
const [active, setActive] = useState(false);
return (
<li
className={active ? 'active' : 'noactive'}
onClick={() => setActive(p => !p)}
>
{children}
</li>
);
};
const App = () => {
return (
<ul className="monthly-instalments">
{creditValues.map((creditValue, index) => (
<Item key={index}>{creditValue.month} months</Item>
))}
</ul>
);
};
export default App;