首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Reactstrap Multi-Level Dropdown祖先不关闭

基础概念

Reactstrap 是一个基于 React 和 Bootstrap 的组件库,提供了许多常用的 UI 组件,包括 Dropdown(下拉菜单)。Multi-Level Dropdown 是指多级下拉菜单,即在一个下拉菜单中嵌套另一个下拉菜单。

相关优势

  1. 组件丰富:Reactstrap 提供了丰富的 UI 组件,可以快速构建出美观且功能齐全的界面。
  2. 易于集成:基于 React 和 Bootstrap,可以轻松集成到现有的 React 项目中。
  3. 响应式设计:Bootstrap 的响应式设计使得组件在不同设备上都能良好显示。

类型

Reactstrap 的 Dropdown 组件主要有以下几种类型:

  1. 基本 Dropdown:最简单的下拉菜单。
  2. Multi-Level Dropdown:多级下拉菜单。
  3. Dropdown Toggle:用于切换下拉菜单的按钮。
  4. Dropdown Menu:下拉菜单的内容部分。

应用场景

Multi-Level Dropdown 常用于需要多层次导航的场景,例如:

  • 大型网站的导航栏,包含多个子菜单。
  • 复杂的应用程序,需要多层次的操作选项。

问题:祖先不关闭

原因

在使用 Reactstrap 的 Multi-Level Dropdown 时,如果祖先 Dropdown 不关闭,通常是因为事件冒泡导致的。当子菜单的点击事件冒泡到祖先菜单时,祖先菜单的关闭逻辑没有被正确触发。

解决方法

可以通过阻止事件冒泡来解决这个问题。在子菜单的点击事件处理函数中,使用 event.stopPropagation() 阻止事件冒泡。

示例代码

代码语言:txt
复制
import React from 'react';
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';

class MultiLevelDropdown extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      dropdownOpen: false,
      subDropdownOpen: false,
    };
  }

  toggle = (openKey) => () => {
    this.setState({
      [openKey]: !this.state[openKey],
    });
  };

  render() {
    return (
      <Dropdown isOpen={this.state.dropdownOpen} toggle={this.toggle('dropdownOpen')}>
        <DropdownToggle caret>
          Dropdown
        </DropdownToggle>
        <DropdownMenu right>
          <DropdownItem onClick={this.toggle('subDropdownOpen')}>
            Sub Dropdown
          </DropdownItem>
          <Dropdown isOpen={this.state.subDropdownOpen} toggle={this.toggle('subDropdownOpen')}>
            <DropdownToggle caret>
              Sub Dropdown Content
            </DropdownToggle>
            <DropdownMenu>
              <DropdownItem onClick={(e) => { e.stopPropagation(); }}>
                Sub Item 1
              </DropdownItem>
              <DropdownItem onClick={(e) => { e.stopPropagation(); }}>
                Sub Item 2
              </DropdownItem>
            </DropdownMenu>
          </Dropdown>
        </DropdownMenu>
      </Dropdown>
    );
  }
}

export default MultiLevelDropdown;

参考链接

通过上述方法,可以有效解决 Reactstrap Multi-Level Dropdown 祖先不关闭的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

CSS 定位和层叠上下文

绝对定位不是相对视口,而是相对最近的祖先定位元素。跟固定元素一样,属性 top、right、bottom 和 left 决定了元素的边缘在包含块里的位置。...如果祖先元素都没有定位,那么绝对定位的元素会基于初始包含块(initial containing block)来定位。初始包含块跟视口一样大,固定在网页的顶部。...通常情况下,模态框要放在网页内容的最后, 关闭标签之前。大多数构建模态框的 JavaScript 库会自动这样做。...相对定位依赖于文档流,绝对定位元素依赖于它的定位祖先节点。这时候需要用 z-index 属性来控制它们的层叠行为。...: 400; --z-modal-body: 410; 如果发现 z-index 没有按照预期表现,就在 DOM 树里往上找到元素的祖先节点,直到发现层叠上下文的根。

1.4K20
  • 组件库源码中这些写法你掌握了吗?

    ; 复制代码 1.1 v-clickoutside ❝ v-clickoutside是Element-ui实现的一个自定义指令,目的是用来处理点击元素外面才会触发的事件,常用来处理下拉菜单等展开内容的关闭...,在Element-ui的Select选择器、Dropdown下拉菜单、Popover 弹出框等组件中都用到了该指令 ❞ element的实现 ❝ element的 clickoutside 的具体实现...用来判断元素所处的位置,简单来说点击绑定v-clickoutside绑定的元素则不触发clickoutside 指令的逻辑,点击包含区域则触发指令绑定的binding.value,我们看下源码向下 ?...2.Mixin(混入) ❝ Mixin相信大家陌生,mixin提供了一种非常灵活的方式,可以用来分发Vue组件中的可复用功能,借助Mixin多个组件可以共享数据和方法。...,它会一直寻找父组件,直到找到组件名和当前传入的组件名一致的祖先组件,就会触发其身上的 $emit 事件,并传递数据 ❞ 下面我们看一个例子element的Select组件 ?

    1.6K40

    【QT】QT样式表语法

    样式表中一般区分大小写,如color与COLOR表相同属性,但类名、对象名以及Qt属性名区分大小写。 声明中的多组"属性 : 值"列表以分号;隔开。...例如: 下来按钮设置图片属性: QComboBox::drop-down{image:url(dropdown.png)} 伪状态 1.选择器可以包含伪状态来限制规则在部件的指定状态上的应用。...如: 鼠标悬停在按钮上时被应用: QPushButton:hover{color:white} 鼠标悬停在按钮上时被应用(!表否定) QPushButton.!...如: QComboBox::drop-down:hover{image:url(dropdown_bright.png) 冲突解决 几个样式规则对相同的属性指定不同的值时会产生冲突。...部件有效的样式表是通过部件的祖先样式表和QApplication上的样式表合并得到的,当发生冲突时,部件自己的样式表优先于任何继承的样式表。

    1.5K31

    组件库源码中这些写法你掌握了吗?

    ; 复制代码 1.1 v-clickoutside ❝ v-clickoutside是Element-ui实现的一个自定义指令,目的是用来处理点击元素外面才会触发的事件,常用来处理下拉菜单等展开内容的关闭...,在Element-ui的Select选择器、Dropdown下拉菜单、Popover 弹出框等组件中都用到了该指令 ❞ element的实现 ❝ element的 clickoutside 的具体实现...用来判断元素所处的位置,简单来说点击绑定v-clickoutside绑定的元素则不触发clickoutside 指令的逻辑,点击包含区域则触发指令绑定的binding.value,我们看下源码向下 ❝...once方法注册并执行一次mouseup回调 拓展:我们看看domjs中on及once的定义 once: 注册事件监听器并只允许执行一次,然后取消监听方法 2.Mixin(混入) ❝ Mixin相信大家陌生...,它会一直寻找父组件,直到找到组件名和当前传入的组件名一致的祖先组件,就会触发其身上的 $emit 事件,并传递数据 ❞ 下面我们看一个例子element的Select组件 el-select(ElSelect

    1.1K21

    python web开发 网络编程 HTTP协议、Web服务器、WSGI接口

    :客户端向服务器发送 HTTP协议请求包,请求资源 应答过程:服务器向客户端发送 HTTP协议应答包,如果资源包含动态语言内容,会先进行处理,得到的数据返回客户端,客户端解释 HTML 渲染在屏幕上 关闭连接... <a class="<em>dropdown</em>-item...传递给前者的参数,元组形式 handle_client_process.start() # 开启线程 client_socket.close() # <em>关闭</em>客户端...client_socket.send(bytes(response, "utf-8")) # 向客户端发送响应数据 client_socket.close() # 关闭客户端连接...WSGI 接口 上面实现了一个静态服务器,但是现在很少使用,更多的是使用 动态页面,实现交互性 例如,注册登录网站,用户输入数据,web服务器处理用户数据(不是它的职责),CGI 诞生 4.1 CGI

    1.1K10

    TDesign 更新周报(2022年10月第1周)

    github.com/Tencent/tdesign-vue/releases/tag/0.48.5Vue3 for Web 发布 0.24.1❗ Breaking ChangesDropdown: 调整Dropdown...用于设置单行表头合并 @chaishi (#1804)超出省略功能,支持同时设置省略浮层内容 ellipsis.content 和属性透传 ellipsis.props @chaishi (#1804)Dropdown...: 支持direction API,支持向左展开菜单 @uyarn (#1817)新增theme等API 支持自定义菜单项主题 @uyarn (#1817)支持直接使用 t-dropdown-menu...作为子节点,同时继续支持 dropdown 的具名插槽,插槽方式支持多级菜单嵌套 @uyarn (#1817)Dialog: 增加 fullscreen api @gumingWu (#1687)Select...#1553)添加参数 response 到事件 onSuccess,单文件是对象,多文件是数组,tdesign-vue-next#1774 @chaishi (#1558)Card: 修复shadow API生效的问题

    1.5K20

    TDesign 更新周报(2022 年 5 月第 2 周)

    : 使用 compositionAPI 重构 dropdown 组件 Bug Fixes InputNumber: 修复 input-number 重构 hook 使用错误出现的问题 tooltip:...releases/tag/0.14.2 React for Web 发布 0.33.2 版 Breaking Changes 重构 DatePicker、TimePicker 组件,样式结构有所调整,存在兼容更新...DateRangePickerPanel 单独使用 支持年份、月份区间选择 支持 allowInput api TimePicker: 重新调整样式、允许输入交互重新设计 调整交互为点击确认按钮保留改动 直接关闭弹窗不保留改动...Next Starter 发布 0.3.1 版 Features lint新增 style scoped 提示 新增维护中页面 升级组件库依赖至 0.14+ Bug Fixes 修复多标签 Tab 页关闭左侧...,关闭其他可能导致主页标签被删除 修复多个滚动列表之间切换时页面刷新导致的样式缺陷 详情见:https://github.com/Tencent/tdesign-vue-next-starter/releases

    1.6K40

    BootStrap应用开发学习入门1

    #插件(其实感觉多余了) .alert() #该方法让所有的警告框都带有关闭功能。$('#identifier').alert(); .alert('close') #关闭所有的警告框。...描述:Bootstrap 自带 12 种 jQuery 插件,扩展了功能,可以给站点添加更多的互动;利用 Bootstrap 数据 API(Bootstrap Data API),大部分的插件可以在编写任何代码的情况下被触发...> #如果您需要保持链接完整(在浏览器启用 JavaScript 时有用),请使用 data-target 属性代替 href="#": ...#fff; background-color: #00bcd4;} #section-5 {color: #fff; background-color: #009688;} /** 遮挡....alert() #该方法让所有的警告框都带有关闭功能。 $('#identifier').alert(); 关闭方法 .alert('close') #关闭所有的警告框。

    44.8K21

    BootStrap应用开发学习入门1

    #插件(其实感觉多余了) .alert() #该方法让所有的警告框都带有关闭功能。$('#identifier').alert(); .alert('close') #关闭所有的警告框。...描述:Bootstrap 自带 12 种 jQuery 插件,扩展了功能,可以给站点添加更多的互动;利用 Bootstrap 数据 API(Bootstrap Data API),大部分的插件可以在编写任何代码的情况下被触发...="dLabel"> #如果您需要保持链接完整(在浏览器启用 JavaScript 时有用),请使用 data-target 属性代替 href="#": <div class...#fff; background-color: #00bcd4;} #section-5 {color: #fff; background-color: #009688;} /** 遮挡....alert() #该方法让所有的警告框都带有关闭功能。 $('#identifier').alert(); 关闭方法 .alert('close') #关闭所有的警告框。

    44.3K30

    TDesign 更新周报(2022年10月第2周)

    组件库Vue2 for Web 发布 0.49.0❗ Breaking ChangesDropdown: 调整Dropdown样式,优化多层菜单样式结构,多层菜单结构有变动 @uyarn (#1607)...FeaturesDropdown: @uyarn (#1607) 支持direction API,支持向左展开菜单新增theme等API 支持自定义菜单项主题支持直接使用 t-dropdown-menu...作为子节点,同时继续支持 dropdown 的具名插槽,插槽方式支持多级菜单嵌套Tag: 样式优化,实现 light-outline 风格 @HelKyle (#1617)Table: @chaishi...支持自定义任意单元格属性新增列属性 colspan,用于设置单行表头合并超出省略功能,支持同时设置省略浮层内容 ellipsis.content 和属性透传 ellipsis.props增强型表格,支持列配置,支持传...#1848)Card: 修复 demo 样式 @yilaierwang (#1861)Avatar: demo 中头像类型展示,删除重复头像并调整展示顺序 @tutaizi (#1838)Popup: 关闭时销毁

    1.1K20

    Java字节流与字符流的区别

    class OutputStreamDemo05 { public static void main(String[] args) throws Exception { // 异常抛出, 处理...public class WriterDemo04 { public static void main(String[] args) throws Exception { // 异常抛出处理...字节流与字符流主要的区别是他们的的处理方式 流分类: 1.Java的字节流:InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。...2.Java的字符流:Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。 注意:InputStream,OutputStream,Reader,Writer都是抽象类。...在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化统一而造成的 在从字节流转化为字符流时,实际上就是byte[]转化为String时, public String(byte bytes[]

    73210

    Bootstrap基础学习笔记

    alert 基类 .alert-{success、info、warning、danger、primary、secondary、light、dark} 各种类型的配色样式 .fade、.show 设置提示框在关闭时的淡出和淡入效果...class="alert alert-success"> 这条信息 .alert-dismissible 带关闭功能的提示...要和data-toggle="dropdown"属性结合使用 .dropdown-toggle-split 菜单分割线,作用未知 菜单列表样式 .dropdown-menu 定义一个下拉菜单容器 .dropdown-menu-right...默认是左对齐 .dropdown-header 下拉菜单标题 .dropdown-item 下拉菜单列表项目 .dropdown-divider 在下拉菜单中创建一个水平的分割线 .active 启用指定下拉菜单列表项目...注意使用bg-{...}不是理想的配色方案,建议使用。 【卡片】卡片用于定义一块带圆角的区域。

    4.9K31

    web前端技术讲解之CSS中position的定位技术

    绝对定位:position:absolute (1) 绝对定位是将元素依据已经定位(绝对、固定或相对定位)的离他最近的祖先元素进行定位,祖先元素没有定位或没有祖先元素则默认依据body浏览器窗口定位。...(3) 绝对定位后的元素将处于赋予其他元素之上,自身不占位置,他原来在正常文档流中所占的空间同时被关闭,就是说绝对定位的元素不占据页面空间,原空间被后续元素使用。...绝对定位必须用left、right、top、bottom属性之一激活,用于指定元素左、右、上、下外边距距离已定位祖先元素(或浏览器)左、右、上、下内边框的距离。...如果定义多个属性,当left、right、冲突时以left为准,当top、bottom冲突时以top为准,如果一个也指定则元素扔按普通文档流布局,但他自己不再占据空间,后续元素上移与其重叠。...固定定位:position:fixed 固定定位与绝对定位absolute相似,定位后元素也生成为新块级盒框、覆盖新位置原有元素,在正常文档流中所占的原空间关闭被后续元素使用。 ?

    87010
    领券