Lesson 3 - Create NavBar.jsx Component

Step 1. Create NavBar.jsx component inside src/components folder

/*NavBar.jsx  -- before SearchBar component */ 
/** @format **/

function NavBar() {
  return (
    <>
      <nav className="navbar bg-body-tertiary">
        <div className="container-fluid">
          <a className="navbar-brand" href="#">
            <img
              className=" col-md-3 "
              src="../src/assets/react.svg"
              alt="BookShelf Logo"
              width="30"
              height="24"
            />
            Google Book Shelf
          </a>
        </div>
      </nav>
    </>
  )
}

export default NavBar

Explanation of NavBar.jsx Code Structure

The NavBar component is responsible for displaying the application header and providing a search bar to handle user queries. Here's a step-by-step breakdown of its functionality:


1. Importing Libraries

  • React: Core library for building the component.

  • useState: Manages the state of the search input.

  • PropTypes: Validates the props passed to the component.

  • Bootstrap: Adds styling for the navbar and form elements.


2. Component Declaration

  • Props:

    • query: The current search term to initialize the input field.

    • onSearch: A function to handle the search query submission and pass it back to the parent component.


3. Local State for Search Input

  • Purpose:

    • Tracks the user’s input in the search bar.

    • Initializes with the value of query received as a prop.


4. Handling Form Submission

  • Explanation:

    • Prevents the default form submission behavior (page reload).

    • Passes the sanitized input back to the parent component via the onSearch prop.


5. Rendering the Navbar

  • Header Title:

    • Displays the app name (Google Bookshelf) in the navbar.

    • Styled using Bootstrap's dark theme (navbar-dark bg-dark).

  • Search Form:

    • Input Field:

      • Pre-filled with the query state.

      • Updates the local searchInput state on user input.

    • Search Button:

      • Submits the form and calls the handleSubmit function.

  • Bootstrap Classes:

    • navbar: Styles the container as a navbar.

    • d-flex ms-auto: Aligns the search form to the right.

    • form-control: Styles the input field.

    • btn btn-outline-light: Creates a light-outlined button for the search.


6. Prop Validation

  • Purpose:

    • Ensures query is a required string.

    • Ensures onSearch is a required function to handle search queries.


7. Exporting the Component

  • Purpose:

    • Makes the NavBar component reusable in the parent application.


Key Takeaways for Students:

  1. State Management:

    • Learn how to handle local state (searchInput) for form inputs.

    • Pass values between child and parent components using props.

  2. Form Handling:

    • Understand how to prevent the default form behavior (e.preventDefault).

    • Trigger actions using parent-defined callback functions (onSearch).

  3. Bootstrap Integration:

    • Utilize Bootstrap classes to style the navbar and search bar for a polished UI.

  4. Prop Validation:

    • Use PropTypes to validate props for better code reliability.


This component is now ready to integrate into AppBookShelf.jsx.

Last updated