iamsanga
iamsanga

Reputation: 33

Bootstrap navbar in react app not working on mobile view

i'm facing issue in bootstrap navbar on react app. The app is working fine on desktop browsers but the same is not working on mobile phone browsers. Please, check my application on github pages on desktop browser and in mobile browser. You can understand the problem. Github-pages link : https://iamsanga.github.io/test-app/

Below is App.js code :

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;

Please provide me a solution. Thanks in advance...!!

Upvotes: 1

Views: 4257

Answers (2)

Nagaraj Vemula
Nagaraj Vemula

Reputation: 128

Add Following CDN to Your 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>

Use following Code in for 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>

Reason Behind your code not working

1) Bootstrap has its own js lib and dependency of Jquery(you haven't included) 2) Actually Navbar was there but controls or navitems was not visible because you wrote the responsive Code to show the nav items to visible only in large screens. In mobile screens to show as the collapsible navbar. But you haven't wrote code for toggle of navbar in mobile screen

Upvotes: 4

Nisharg Shah
Nisharg Shah

Reputation: 19642

Add navbar-dark class in your nav tag, so the hamburger menu will be visible.

After, add jquery and bootstrap.js in your project so collapse will work.

Or use react-bootstrap and its best choice because using jQuery in React is not the correct way.

Upvotes: 2

Related Questions