【问题标题】:Bootstrap navbar in react app not working on mobile view反应应用程序中的引导导航栏不适用于移动视图
【发布时间】:2020-08-02 21:56:49
【问题描述】:

我在 react 应用程序的引导导航栏中遇到问题。该应用程序在桌面浏览器上运行良好,但在手机浏览器上却无法正常运行。请在桌面浏览器和移动浏览器的 github 页面上检查我的应用程序。你可以理解这个问题。 Github 页面链接:https://iamsanga.github.io/test-app/

下面是 App.js 代码:

import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";

import Create from "./components/Create";
import Edit from "./components/Edit";
import Index from "./components/Display";

class App extends Component {
  constructor(props) {
    super(props);
    this.state = { data: [], results: [], query: "" };
  }

  onSearch = event => {
    this.setState({ query: event });

    let updateList = this.state.data;
    updateList = updateList.filter(item => {
      return (
        item.name.toLowerCase().search(this.state.query.toLowerCase()) !== -1
      );
    });

    this.setState({
      results: updateList
    });
  };

  receiveData = data => {
    this.setState({
      data: [...this.state.data, data]
    });
    // console.log(this.state.data);
  };
  onDelete = name => {
    // console.log(name);
    const filteredData = this.state.data.filter(data => {
      return data.name !== name;
    });
    this.setState({ data: filteredData });
  };

  onEdit = (newData, orgName) => {
    let updateData = this.state.data;
    updateData = updateData.map(data => {
      if (data.name === orgName) {
        data.name = newData.name;
        data.shop = newData.shop;
        data.status = newData.status;
      }

      return updateData;
    });

    this.setState({ updateData });
  };

  render() {
    const { data, results, query } = this.state;
    // console.log("res",this.state.results)
    var datas = results !== "" && !query ? data : results;

    return (
      <Router>
        <div className="container">
          <nav className="navbar navbar-expand-lg navbar-blue bg-light">
            <div
              className="collapse navbar-collapse"
              id="navbarSupportedContent"
            >
              <ul className="navbar-nav mr-auto">
                <li className="nav-item">
                  <Link to={"/create"} className="nav-link">
                    Home
                  </Link>
                </li>
                <li className="nav-item">
                  <Link to={"/index"} className="nav-link">
                    Records
                  </Link>
                </li>
              </ul>
            </div>
          </nav>
          <Switch>
            <Route
              exact
              path="/"
              render={() => <Create data={this.receiveData} />}
            />
            <Route
              path="/create"
              render={() => <Create data={this.receiveData} />}
            />
            <Route path="/edit" render={() => <Edit onEdit={this.onEdit} />} />
            <Route
              path="/index"
              render={() => (
                <Index
                  onSearch={this.onSearch}
                  onDelete={this.onDelete}
                  data={datas}
                />
              )}
            />
          </Switch>
        </div>
      </Router>
    );
  }
}

export default App;

请给我一个解决方案。提前谢谢...!!

【问题讨论】:

    标签: reactjs bootstrap-4 navbar


    【解决方案1】:

    nav 标签中添加navbar-dark 类,这样汉堡菜单就会可见。

    之后,在您的项目中添加jquerybootstrap.js,这样折叠就可以工作了。

    或者使用react-bootstrap 和它的最佳选择,因为在React 中使用jQuery 不是正确的方法。

    【讨论】:

    • @iamsanga 兄弟,时间很重要,我在 12:01 添加了答案,nagaraj 在 12:24 添加了相同答案的答案。所以接受的答案应该是我的,所以,请接受我的答案作为正确答案,下次请在接受任何答案之前查看它
    【解决方案2】:

    将关注 CDN 添加到您的public/index.html

      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    
      <title>React App</title>
      <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
        integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
        crossorigin="anonymous"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
        integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
        crossorigin="anonymous"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
        integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
        crossorigin="anonymous"></script>
    

    在导航栏中使用以下代码

          <nav className="navbar navbar-expand-lg navbar-light bg-light">
            <button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
              <span className="navbar-toggler-icon"></span>
            </button>
            <div className="collapse navbar-collapse" id="navbarNav">
              <ul className="navbar-nav">
                <li className="nav-item active">
                  <Link to={"/create"} className="nav-link">
                    Home
                  </Link>
                </li>
                <li className="nav-item">
                  <Link to={"/index"} className="nav-link">
                    Records
                  </Link>
                </li>
              </ul>
            </div>
          </nav>
    

    代码不起作用的原因

    1)Bootstrap 有自己的 js lib 和 Jquery 的依赖(你没有包含) 2)实际上导航栏在那里,但控件或导航项不可见,因为您编写了响应代码以显示导航项仅在大屏幕中可见。在移动屏幕中显示为可折叠导航栏。但是您还没有编写在移动屏幕中切换导航栏的代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 2018-10-03
      • 2021-06-14
      • 1970-01-01
      相关资源
      最近更新 更多