如何在复选框中添加复选框到reactjs?

用户名

我正在使用递归功能制作动态菜单,并且已经制作了菜单,并且菜单以正确的顺序显示,没有任何问题。

需求:

在这里,我需要找出菜单最后一级,并需要为复选框分配值作为其各自的ID {item.id}

例如:

对于第一个菜单一个

 -> [Checkbox with value as 1.1.1] One-One-One
 -> [Checkbox with value as 1.1.2] One - one - two
 -> [Checkbox with value as 1.1.3] One - one - three

对于第二菜单

 -> [Checkbox with value as 2.1] Two - one

对于第六菜单

 -> [Checkbox with value as 6] Six

我希望很明显,我需要像上面的示例那样找出最后一级的子级,并应该为其分配一个复选框,并带有它们的值id

请查看下面提供的代码段,并帮助我实现在最后一级显示复选框的结果

注意:复选框必须与最后一级元素内联,如上面显示的示例,其中复选框值分别为id

此要求的目的是它将具有多个子菜单,并且最后一级具有过滤器值,因此在单击复选框时,我会将值传递api给此特定的选中菜单项并检索相关数据,然后将显示。在这里,我需要与菜单项相对应的复选框显示。

const loadMenu = () => Promise.resolve([{id:"1",name:"One",children:[{id:"1.1",name:"One - one",children:[{id:"1.1.1",name:"One - one - one"},{id:"1.1.2",name:"One - one - two"},{id:"1.1.3",name:"One - one - three"}]}]},{id:"2",name:"Two",children:[{id:"2.1",name:"Two - one"}]},{id:"3",name:"Three",children:[{id:"3.1",name:"Three - one",children:[{id:"3.1.1",name:"Three - one - one",children:[{id:"3.1.1.1",name:"Three - one - one - one",children:[{id:"3.1.1.1.1",name:"Three - one - one - one - one"}]}]}]}]},{id:"4",name:"Four"},{id:"5",name:"Five",children:[{id:"5.1",name:"Five - one"},{id:"5.2",name:"Five - two"},{id:"5.3",name:"Five - three"},{id:"5.4",name:"Five - four"}]},{id:"6",name:"Six"}]);

const {Component, Fragment} = React;
const {Button, Collapse} = Reactstrap;

class Menu extends Component {
  constructor(props) {
    super(props);
    this.state = {menuItems: []};
  }

  render() {
    return <MenuItemContainer menuItems={this.state.menuItems} />;
  }

  componentDidMount() {
    loadMenu().then(menuItems => this.setState({menuItems}));
  }
}

function MenuItemContainer(props) {
  if (!props.menuItems.length) return null;
  
  const renderMenuItem = menuItem =>
    <li key={menuItem.id}><MenuItem {...menuItem} /></li>;
    
  return <ul>{props.menuItems.map(renderMenuItem)}</ul>;
}
MenuItemContainer.defaultProps = {menuItems: []};

class MenuItem extends Component {
  constructor(props) {
    super(props);
    this.state = {isOpen: false};
    this.toggle = this.toggle.bind(this);
  }

  render() {
    return (
      <Fragment>
        <Button onClick={this.toggle}>{this.props.name}</Button>
        <Collapse isOpen={this.state.isOpen}>
          <MenuItemContainer menuItems={this.props.children} />
        </Collapse>
      </Fragment>
    );
  }

  toggle() {
    this.setState(({isOpen}) => ({isOpen: !isOpen}));
  }
}

ReactDOM.render(<Menu />, document.getElementById("root"));
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reactstrap/8.4.1/reactstrap.min.js"></script>

<div id="root"></div>

思想家

据我了解,您需要最后一个孩子的复选框。这可以通过检查元素是否有子元素来实现。

以下是为了添加复选框所做的更改。

render() {
  
  let isLastChild = this.props.children ? false : true;
  
  return (
    <Fragment>
      <Button onClick={this.toggle}>{this.props.name}</Button>
      <Fragment>
        {isLastChild ? <Input type="checkbox" /> : ''}
      </Fragment>
      <Collapse isOpen={this.state.isOpen}>
        <MenuItemContainer menuItems={this.props.children} />
      </Collapse>
    </Fragment>
  );
}

这是plnkr链接供您参考。

希望能帮助到你 :)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Dojo树中的复选框添加

来自分类Dev

如何在uialertview中添加复选框?

来自分类Dev

如何在QGraphicsView的左下角添加复选框?

来自分类Dev

如何在新行中添加复选框项?

来自分类Dev

如何在复选框中全选

来自分类Dev

如何在特定的行和列添加复选框?

来自分类Dev

ReactJS:状态中的动态复选框

来自分类Dev

如何选择多个复选框reactjs?

来自分类Dev

如何在复选框中添加/删除选中的属性?

来自分类Dev

如何在Reactjs中选择复选框?

来自分类Dev

如何在隐藏了复选框的CSS中为复选框的标签添加边距?

来自分类Dev

如何在Flutter的ListView中添加复选框?

来自分类Dev

如何在GridView中动态添加带有复选框标题的复选框列?

来自分类Dev

如何在复选框对话框中默认选中复选框

来自分类Dev

如何在Android中的checkedtextView中对齐复选框

来自分类Dev

如何在uialertview中添加复选框?

来自分类Dev

如何在QGraphicsView的左下角添加复选框?

来自分类Dev

如何在提交按钮前添加复选框?

来自分类Dev

如何在foreach中创建复选框时将复选框放置在DIV上

来自分类Dev

如何在每个查询结果中添加复选框?

来自分类Dev

如何从PHP中的复选框中添加值

来自分类Dev

如何为列表添加复选框

来自分类Dev

如何在树形表中添加复选框

来自分类Dev

在Java中动态添加复选框

来自分类Dev

如何在特定的行和列添加复选框?

来自分类Dev

添加复选框按钮

来自分类Dev

如何在jquery中添加复选框的数据值

来自分类Dev

如何在 antd 复选框组中单独更新复选框

来自分类Dev

Tkinter - 如何添加额外的复选框?