如何在 bootstrap 手风琴中将加号切换为减号和 vice-versa

How to toggle plus to minus and vice-versa in bootstrap Accordion

我正在使用 react-bootstrapAccordion 上工作 我已经成功创建了手风琴,现在我想为每个 header 提供切换,例如打开时的加减 -关闭时唱歌显示加号,但我无法处理该事件

我做了什么

import React from "react";
import "./styles.css";
import { Accordion, Card } from "react-bootstrap";

const App = () => {
  const data = [
    { name: "mike", age: 22 },
    { name: "clive", age: 25 },
    { name: "morgan", age: 82 }
  ];
  return (
    <div className="App">
      <Accordion defaultActiveKey="0">
        {data.map((item, index) => (
          <Card>
            <Accordion.Toggle as={Card.Header} eventKey={index}>
              {item.name}
            </Accordion.Toggle>
            <Accordion.Collapse eventKey={index}>
              <Card.Body>{item.age}</Card.Body>
            </Accordion.Collapse>
          </Card>
        ))}
      </Accordion>
    </div>
  );
};
export default App;

I am using this

Working Code sandbox

您可以只创建一个带有自定义 onclick 事件的自定义 Accordion.Toggle#,也可以使用 useState 来处理设置 +/- 的切换事件迹象:

这是一个片段或 sandbox:

import React, { useState } from "react";
import "./styles.css";
import { Accordion, Card, useAccordionToggle } from "react-bootstrap";

function CustomToggle({ children, eventKey, handleClick }) {
  const decoratedOnClick = useAccordionToggle(eventKey, () => {
    handleClick();
  });

  return (
    <div className="card-header" type="button" onClick={decoratedOnClick}>
      {children}
    </div>
  );
}

const App = () => {
  const [activeKey, setActiveKey] = useState(0);

  const data = [
    { name: "mike", age: 22 },
    { name: "clive", age: 25 },
    { name: "morgan", age: 82 }
  ];
  return (
    <div className="App">
      <Accordion defaultActiveKey={0} activeKey={activeKey}>
        {data.map((item, index) => (
          <Card key={index}>
            <CustomToggle
              as={Card.Header}
              eventKey={index}
              handleClick={() => {
                if (activeKey === index) {
                  setActiveKey(null);
                } else {
                  setActiveKey(index);
                }
              }}
            >
              {item.name}
              {activeKey === index ? "-" : "+"}
            </CustomToggle>
            <Accordion.Collapse eventKey={index}>
              <Card.Body>{item.age}</Card.Body>
            </Accordion.Collapse>
          </Card>
        ))}
      </Accordion>
    </div>
  );
};
export default App;