javascript - React Bootstrap Collapse 任何时候只有一个项目折叠?

标签 javascript reactjs react-hooks react-state

如何转换下面的代码以便调用

<div><Example/></div>
<div><Example/></div>
<div><Example/></div>

当我单击一个 Example 项目然后单击另一个项目时,之前打开的 Example 项目关闭了吗?目前,该项目只有在被点击时才会关闭,如果我点击另一个项目将保持打开状态。

function Example() {
  const [open, setOpen] = useState(false);
    
  return (
    <>
      <Button
        onClick={() => setOpen(!open)}
        aria-controls="example-collapse-text"
        aria-expanded={open}
        className="Collapse-Test"
        data-open={open}
      >
        click
      </Button>
      <Collapse in={open}>
        <div id="example-collapse-text">
          Hidden Text
        </div>
      </Collapse>
    </>
  );
};

最佳答案

将状态提升到父组件,以便它可以控制当前选择和打开的内容。更新 Example 组件以获取 openonClick Prop 。

示例组件

interface IExample {
  open: boolean;
  onClick: () => void;
}

function Example({ open, onClick }: IExample) {
  return (
    <>
      <Button
        onClick={onClick}
        aria-controls="example-collapse-text"
        aria-expanded={open}
        className="Collapse-Test"
        data-open={open}
      >
        click
      </Button>
      <Collapse in={open}>
        <div id="example-collapse-text">
          Hidden Text
        </div>
      </Collapse>
    </>
  );
};

父组件

const [openId, setOpenId] = useState<number | null>(null);

const toggleHandler = (id: number) => () => {
  // toggle closed if already open, otherwise set new open id
  setOpenId(openId => openId === id ? null : id);
};

...

<div>
  <Example open={openId === 1} onClick={toggleHandler(1)} />
</div>
<div>
  <Example open={openId === 2} onClick={toggleHandler(2)} />
</div>
<div>
  <Example open={openId === 3} onClick={toggleHandler(3)} />
</div>

Edit react-bootstrap-collapse-only-have-one-item-collapsed-at-any-time

关于javascript - React Bootstrap Collapse 任何时候只有一个项目折叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74160415/

相关文章:

java - 使用js或extjs访问java对象列表

javascript - 将第一个元素保存到待办事项数组中时出现问题

reactjs - Next.js + React 返回上一页

reactjs - 未捕获的类型错误 : Cannot read properties of undefined (reading 'pathname' ) : how to solve this router issue?

javascript - 事件保持绑定(bind)到僵尸实例

javascript - 如何从当前导航器系列的 Highcharts 中获取摘要?

javascript - 在 JavaScript 中为动态生成的复选框触发警报消息时出现问题

reactjs - Firebase + Next.js 无服务器,在 GCP 上 - 如何管理暂存、生产 + 本地

javascript - '类型错误 : Right side of assignment cannot be destructured' useContext React Hooks

javascript - 使用通用函数来处理用户在 REACT 中单击时多个基于数组的相似状态的变化