【问题标题】:Dynamically expand/collapse on click of header单击标题时动态展开/折叠
【发布时间】:2019-08-26 08:54:16
【问题描述】:

我有一组需要在 UI 中显示的项目,例如标题和其下的项目列表。
有一个父组件,我将这些数据传递给如下所示的文件。
在此基础上显示父子布局。
现在我需要根据标题的点击展开/折叠。

有一个类“open”和“close”可以附加到 div 上。基于它,它会折叠/展开。
关键是如何逐项进行

谁能帮忙


import React from "react";
import Child from "./Child";
import Parent from "./Parent";

export default class Helper extends React.Component{
  constructor(props: any) {
    super(props);
    this.state = {
      parent:{},
      children:{},
    };
  }

  componentDidMount() {
    this.setParentValue();
    this.setChildValue();
  }


  render() {
    const { parent, children } = this.state;
    const { name } = this.props;
    return (
      <>
        <div className="an-panel expand-panel expand-close">
          <div className="an-panel-header">
            <div className="title-holder">
              <span className="toggle-icon far fa-plus-square" />
              <span className="toggle-icon far fa-minus-square" />
              <h5>{name}</h5>
            </div>
            <div className="action-holder">
              <div className="status-holder">
                <Parent
                  parent = {parent}
                  onSelect={this.handleParentClick}
                />
              </div>
            </div>
          </div>
          {children.map(({ id, name },id) => (
            <div className="an-panel-body" key={id}>
              <ul className="applications-list-holder">
                <li>
                  <div className="name">{name}</div>
                  <div className="status">
                    <Child
                      children={children}
                      onSelect={this.setChildSwitchValue}
                    />
                  </div>
                </li>
              </ul>
            </div>
          ))}
        </div>
      </>
    );
  }
}

【问题讨论】:

  • 你已经尝试过什么?什么是an-panel,您的自定义组件?
  • @MedetTleukabiluly 它是该面板的自定义类。如果我添加“关闭”或“打开”,它会折叠或展开。但希望这是明智的。
  • 什么是item wise
  • @MedetTleukabiluly 就像单个标题将具有 + 或 - 表示展开或折​​叠的按钮。点击它应该展开或折叠。默认情况下,由于这个 className="an-panel expand-panel expand-close",所有内容都将处于折叠状态。现在,如果我使它成为 expand-open ,它会被扩展,但对于所有项目。我想要单个项目展开/折叠之类的东西。
  • 现在如果我让它展开-打开你在哪里做的,显示代码

标签: javascript reactjs setstate


【解决方案1】:

好吧,让我给你解释一下,这是你的代码

    import React from "react";
import Child from "./Child";
import Parent from "./Parent";

export default class Helper extends React.Component{
    constructor(props: any) {
        super(props);
        this.state = {
            parent:{},
            children:{},
            navBarStatus: false,
        };
    }

    componentDidMount() {
        this.setParentValue();
        this.setChildValue();
    }

   changeNavBar = (e, status)=>{
        this.setState({navBarStatus: !status});
    }


    render() {
        const { parent, children } = this.state;
        const { name } = this.props;
        return (
            <>
                <div className={`an-panel expand-panel ${this.state.navBarStatus ? "expand-open" : "expand-close"}`}>
              <div className="an-panel-header" onClick={(e)=>this.changeNavBar(e, this.state.navBarStatus)}>
                <div className="title-holder">
                  <span className="toggle-icon far fa-plus-square" />
                  <span className="toggle-icon far fa-minus-square" />
                  <h5>{name}</h5>
                </div>
                <div className="action-holder">
                  <div className="status-holder">
                    <Parent
                      parent = {parent}
                      onSelect={this.handleParentClick}
                    />
                  </div>
                </div>
              </div>
              {children.map(({ id, name },id) => (
                <div className="an-panel-body" key={id}>
                  <ul className="applications-list-holder">
                    <li>
                      <div className="name">{name}</div>
                      <div className="status">
                        <ChildSetting
                          children={children}
                          onSelect={this.setChildSwitchValue}
                        />
                      </div>
                    </li>
                  </ul>
                </div>
              ))}
            </div>
          </>
        );
      }
    }

您可以看到我在状态 navBarStatus 中获取了一个新属性。基于 navBarStatus 值,我正在更改 CSS 类,它将扩展/关闭您附加的 div

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 2018-05-15
    • 2010-12-24
    • 2019-03-23
    相关资源
    最近更新 更多