javascript - React状态钩子(Hook),toogle类,为什么两个元素都获得 "active"类?

标签 javascript reactjs react-hooks

希望你能帮助我。

为什么我的两个 li 元素都应用了 active 类?

import React, { useState } from "react";
import "./styles.css";

const App = () => {
  const [active, setActive] = useState("false");

  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
    }
  ];

  return (
    <ul className="monthly-instalments">
      {creditValues.map(creditValue => (
        <li
          className={setActive ? "active" : "notactive"}
          data-month={creditValue.month}
          data-interval={creditValue.interval}
          data-apr={creditValue.apr}
          data-monthly={creditValue.monthly}
          data-interest={creditValue.interest}
          data-cost={creditValue.cost}
          data-total={creditValue.total}
          onClick={() => setActive(!active)}
        >
          {creditValue.month} months
        </li>
      ))}
    </ul>
  );
};

export default App;

Edit flamboyant-hofstadter-7rgz5

最佳答案

在当前示例中,两个列表项共享相同的状态。

因此,在每次渲染时,切换状态都会同时反射(reflect) <li/>项目。

您希望每个列表项都有自己的 active状态。

请注意,您有一些错误,例如字符串 'false' ,比较 classNamesetActive功能并且没有 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;

Edit cold-brook-tsdrs

关于javascript - React状态钩子(Hook),toogle类,为什么两个元素都获得 "active"类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59614729/

相关文章:

javascript - 显示父 UL 并为根父节点显示 UL 和 LI 节点

c# - 在警报对话框中单击按钮时重定向

javascript - 在表单输入之前获取具有特定类的 div

javascript - Material UI 选项卡 : After switch between tabs, 选项卡中的更改被丢弃

reactjs - 如何在 reactjs 中以适当的间距、换行符和格式显示响应?

javascript - 作为函数的 Prop 是否属于 useEffect 依赖数组?

javascript - 从选择下拉列表中选择选项时禁用其他字段

reactjs - React JS 在某些浏览器中不起作用

reactjs - 运行 npm install 时有关对等依赖项的警告

javascript - 从钩子(Hook)返回值(value) promise