Bootstrap 下拉菜单在 React 中不起作用

IT技术 javascript twitter-bootstrap reactjs
2021-03-23 20:03:03

我正在尝试在我的 React 组件之一的表单中创建一个下拉列表。下面是我如何设置代码的下拉部分,以下是在我返回的 div 标签内的表单父标签内。:

//<div>
//<form>
//some code here

    <div className="row top-buffer">
        <div className="col">
            <div className="dropdown">
                <button 
                    className="btn btn-secondary dropdown-toggle" 
                    type="button" 
                    id="dropdownMenuButton" 
                    data-toggle="dropdown" 
                    aria-haspopup="true">
                    Dropdown
                </button>
                <div className="dropdown-menu" aria-labelledby="dropdownMenuButton">
                    <a className="dropdown-item" href="#nogo">Item 1</a>
                    <a className="dropdown-item" href="#nogo">Item 2</a>
                    <a className="dropdown-item" href="#nogo">Item 3</a>
                </div>
            </div>
        </div>
    </div>

//some code here
//</form>
//</div>

但是,当我单击下拉按钮时,它不会显示下拉菜单及其中的项目。

我所有的其他引导组件都工作正常。我究竟做错了什么?

编辑:

我在 index.js 中引用了 bootstrap:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import 'bootstrap/dist/css/bootstrap.min.css'
import './App.css'
import registerServiceWorker from './registerServiceWorker';

ReactDOM.render(<App />, document.getElementById('root'));
registerServiceWorker();

我错过了什么吗?

6个回答

要使下拉菜单和其他 js 内容在 4th Bootstrap 中工作,您只需按照以下步骤操作:使用 npm 安装到依赖项:

npm i --save bootstrap jquery popper.js

将它添加到 index.js

import 'bootstrap';
import 'bootstrap/dist/css/bootstrap.css';
import 'bootstrap/dist/js/bootstrap.js';
import $ from 'jquery';
import Popper from 'popper.js';

所有步骤都从这里开始

谢谢,这在安装引导程序和proper.js 后进行了微小的更改, npm i bootstrap@4.4.1 npm i --save bootstrap jquery popper.js 我只将以下两行导入index.js: import 'bootstrap/dist/css/bootstrap.css'; import 'bootstrap/js/dist/dropdown'; 注意:您需要在以下时间重新启动应用程序:npm i --save bootstrap jquery popper.js
2021-06-11 20:03:03
按照来源进一步了解这个问题:blog.logrocket.com/how-to-use-bootstrap-with-react-a354715d1121
2021-06-14 20:03:03

这是因为您已经添加了 HTML 和 CSS,但没有为其添加 js。当您单击下拉菜单时,您的代码不知道该怎么做。是您必须如何执行操作的示例。和下面的代码:

class Dropdown extends React.Component {
  state = {
    isOpen: false
  };

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

  render() {
    const menuClass = `dropdown-menu${this.state.isOpen ? " show" : ""}`;
    return (
      <div className="dropdown" onClick={this.toggleOpen}>
        <button
          className="btn btn-secondary dropdown-toggle"
          type="button"
          id="dropdownMenuButton"
          data-toggle="dropdown"
          aria-haspopup="true"
        >
          Dropdown
        </button>
        <div className={menuClass} aria-labelledby="dropdownMenuButton">
          <a className="dropdown-item" href="#nogo">
            Item 1
          </a>
          <a className="dropdown-item" href="#nogo">
            Item 2
          </a>
          <a className="dropdown-item" href="#nogo">
            Item 3
          </a>
        </div>
      </div>
    );
  }
}

ReactDOM.render(<Dropdown />, document.getElementById("root"));
不,这只是举例。您需要将 onClick 传递给将切换其打开状态的下拉组件。根据此打开状态,您将是否添加“show” className。如果你添加这个 className 你的下拉菜单将是可见的,否则它不会。
2021-05-24 20:03:03
这与引导程序不同,例如,如果您从下拉菜单中单击它保持打开状态,则必须再次单击以关闭它。当您从下拉列表中单击时,Bootstrap 将关闭。我遇到了同样的问题并尝试了此解决方案,但无法使其正常工作
2021-05-26 20:03:03
所以我需要制作一个单独的 Dropdown 组件并在我想要下拉的组件中使用它?
2021-05-31 20:03:03

经过长时间的搜索和调整,我在这里得到了答案

你只需要添加一个 css 来解决这个问题。当您单击下拉按钮时,它会向该元素添加一个“显示”类,并且根据引导程序,这足以使下拉按钮工作。

.show>.dropdown-menu {
  display: block;
  position: absolute;
}

对我来说,它就像魅力一样。

我尝试了@teimurjan 解决方案,它对我有用,但有两个问题

  1. 我必须管理一个状态,即使它不需要
  2. 单击下拉菜单后,展开的菜单不会在单击正文或其他任何地方时消失。

将引导程序添加为module -

npm i --save bootstrap

根据我的经验,请将此行添加到您的index.js并重试 -

import 'bootstrap';

让我知道事情的后续。

找不到module:无法解析“/Users/wipe/Desktop/ironhack/lab-react-ironbeers/starter-code/node_modules/bootstrap/dist/js”中的“jquery”
2021-06-03 20:03:03
不要在你的引导项目中使用 jquery。
2021-06-07 20:03:03
我不明白你的意思。我在我的反应项目中使用引导程序并使用 web pack 将 jquery 与我的应用程序捆绑在一起,然后我唯一需要做的就是导入“引导程序”;
2021-06-12 20:03:03
如果您使用 create-react-app 导入引导程序的正确方法是 import 'bootstrap/dist/css/bootstrap.css'
2021-06-12 20:03:03
bootstrap 需要 jquery,请在您的项目中安装它。
2021-06-17 20:03:03

对我来说,这个问题是通过使用 Bootstrap 4.5 而不是 Bootstrap 5 解决的。

要使用纱线执行此操作,请编写:

yarn remove bootstrap
yarn add bootstrap@^4.5

在 index.js 中,我只是像这样导入它。

import 'bootstrap';
import 'bootstrap/dist/css/bootstrap.css';