reactjs - 同一元素的两个实例似乎共享状态

标签 reactjs

在我的 React 应用程序中,我有一个不止一次使用的 Collapsible 组件,如下所示:

const [openFAQ, setOpenFAQ] = React.useState("");

const handleFAQClick = (question: string) => {
  if (question === openFAQ) {
    setOpenFAQ("");
  } else {
    setOpenFAQ(question);
  }
};

return ({
  FAQS.map(({ question, answer }, index) => (
    <Collapsible
      key={index}
      title={question}
      open={openFAQ === question}
      onClick={() => handleFAQClick(question)}
    >
      {answer}
    </Collapsible>
  ))
})

并且 Collapsible 元素接受 open 作为 Prop 并且没有自己的状态:

export const Collapsible = ({
  title,
  open,
  children,
  onClick,
  ...props
}: Props) => {
  return (
    <Container {...props}>
      <Toggle open={open} />
      <Title onClick={onClick}>{title}</Title>
      <Content>
        <InnerContent>{children}</InnerContent>
      </Content>
    </Container>
  );
};

但是,当我单击第二个 Collapsible 时,第一个打开...我不明白为什么。

沙箱中提供了一个工作示例 here .

最佳答案

您需要确保每个复选框的标签和 ID 相同。这是一个有效的 example

但如果您尝试实现 Accordion 样式,则可能需要另一种方法。

关于reactjs - 同一元素的两个实例似乎共享状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68938923/

相关文章:

reactjs - 如何逻辑地结合react-router和redux进行客户端和服务器端渲染

reactjs - React/Next 应用程序不断给我一个关于缺少 prerender-manifest.json 的错误

javascript - webpack 拆分和导入模块

css - React 元素中无法识别 minmax CSS 函数

reactjs - 在 React 中使用 "npm run build"后路由未加载

javascript - 如何使用 JS 将字符串替换为图像

javascript - 如何使用 React es6 处理多个受控输入?

reactjs - 使用 nextJS 渲染图像时出错。图像不出现

javascript - 如何在 ReactJS 中从 “outside” 访问组件方法?

javascript - 从 React ES6 导入时,Webpack3 CSS/LESS 不起作用