Bootstrap навигация в приложении реакции не работает в мобильном представлении - PullRequest
0 голосов
/ 20 апреля 2020

Я столкнулся с проблемой в bootstrap navbar в приложении реакции. Приложение отлично работает в браузерах настольных компьютеров, но не работает в браузерах мобильных телефонов. Пожалуйста, проверьте мое приложение на страницах github в настольном браузере и в мобильном браузере. Вы можете понять проблему. Ссылка на Github-страницы: https://iamsanga.github.io/test-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;

Пожалуйста, предоставьте мне решение. Заранее спасибо ... !!

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Добавить следующий 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>

Использовать следующий код для Navbar

      <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) На самом деле Navbar был там, но элементы управления или навигационные элементы не были видны, потому что вы написали отзывчивый код для отображения Навигационные элементы отображаются только на больших экранах На мобильных экранах показывать как разборную навигационную панель. Но вы не написали код для переключения навигационной панели на экране мобильного телефона

0 голосов
/ 20 апреля 2020

Добавьте navbar-dark класс в ваш тег nav, чтобы было видно меню гамбургера.

После этого добавьте jquery и bootstrap.js в ваш проект, чтобы сработал коллапс.

Или используйте react-bootstrap и его лучший выбор, потому что jQuery в React - неправильный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...