【问题标题】:How to activate a single div using React.js and setActive?如何使用 React.js 和 setActive 激活单个 div?
【发布时间】:2021-07-23 21:35:36
【问题描述】:

我目前正在创建一个具有三个菜单选项卡的应用程序,每个选项卡都由带有菜单标题和内容的手风琴表示。目前,当单击标题时,内容 div 会相对于框中的任何内容显示。我想单击每个菜单标题并让该菜单的内容 div 单独显示,从而触发该特定 div 的活动状态。

我创建的切换手风琴功能会打开所有内容窗口。单击任何菜单标题时,将显示所有内容。

这是我的功能,简化:

function PlayerApp(props) {

  const [setActive, setActiveState] = useState("");
  const [setHeight, setHeightState] = useState("0px");

  const content = useRef(null);

  function toggleAccordion() { 

    setActiveState(setActive === "" ? "active" : "");

    setHeightState(
      setActive === "active" ? "0px" : `${content.current.scrollHeight}px`
    );
  }

  return (

  <div className="content"> 

    <div className="content-list">
      
       <div ref={content} style={{ maxHeight: `${setHeight}` }} className="accordion__content">
       <div className="accordion__text"> text content here </div>

       </div>
      </div>

      <div className="content-list">
        
        <div ref={content} style={{ maxHeight: `${setHeight}` }} className="accordion__content">
        <div className="accordion__text"> text here </div>

       </div>
      </div>

      <div className="content-list">

        <div ref={content} style={{ maxHeight: `${setHeight}` }} className="accordion__content">
        <div className="accordion__text"> text content her </div>

       </div>

      </div>

        <div className="content-title">
          <button className={`menu_title1 ${setActive}`} onClick={toggleAccordion}>
            <p className="accordion__title">Menu 1:</p>
            </button>
        </div>

          <div className="content-title">
          <button className={`menu_title2 ${setActive}`} onClick={toggleAccordion}>
            <p className="accordion__title">Menu 2:</p>
            </button>
        </div>
           <div className="content-title">
          <button className={`menu_title3 ${setActive}`} onClick={toggleAccordion}>
            <p className="accordion__title">Menu 3:</p>
            </button>
        </div>

        </div>

  );
}

export default PlayerApp;

尽管我的每个按钮类都有唯一的名称,但单击该类仍会触发所有这些 div 的活动状态。

如何更改我的功能,以便单击每个按钮为该手风琴窗口呈现独特的响应?

【问题讨论】:

    标签: javascript css reactjs react-hooks gatsby


    【解决方案1】:

    您实际上可以通过创建一个包含菜单详细信息的数组来清理您的代码。

      const accordionItems = [
        { id: 'menu1', text: 'Menu 1' },
        { id: 'menu2', text: 'Menu 2' },
        { id: 'menu3', text: 'Menu 3' },
      ];
      const [activeItem, setActiveItem] = useState();
    

    html 会是这样的

     {accordionItems.map((p, index) => {
              return (
                <div className="content-title">
                  <button
                    className={`menu_title1 ` + (activeItem === p.id ? 'active' : '')}
                    onClick={() => {
                      setActiveItem(p.id);
                    }}
                  >
                    <p className="accordion__title">{p.text}</p>
                  </button>
                </div>
              );
            })}
    

    【讨论】:

    • 努力将其集成到我的代码中并处理我的其他功能,似乎当我尝试替换内容标题时它从我的屏幕上消失了
    猜你喜欢
    • 2018-11-20
    • 2021-03-11
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多