14- Final First React Project(Single Page Application by React Router)

 

Creating our first single page application TextFormat


These are the following steps we will perform to create our SPA:


1- We are using <BrowserRouter> so we need to import dependencies required in App.js


src --> App.js

import {
  BrowserRouter ,
  Routes,
  Route,
 
} from "react-router-dom";


Also we are  navigating URLs via Navbar component therefore import Link dependency and 

Change  anchor tag  <a> to <Link>


src --> components  -->  Navbar.js

import React from 'react';
import propTypes from 'prop-types';

import {Link} from "react-router-dom";


export default function Navbar(props) {
  return (

      <nav className={`navbar navbar-expand-lg navbar-${props.mode} bg-${props.mode}`}>
  <div className="container-fluid">
   
    <Link className="navbar-brand"to="/"> {props.title} </Link>
   
    <button className="navbar-toggler" type="button" data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <span className="navbar-toggler-icon"></span>
    </button>
    <div className="collapse navbar-collapse" id="navbarSupportedContent">
      <ul className="navbar-nav me-auto mb-2 mb-lg-0">
        <li className="nav-item">
         
          <Link className="nav-link " aria-current="page" to="/">Home</Link>

        </li>
        <li className="nav-item">
         
          <Link className="nav-link " to="/about"> {props.about} </Link>
 </li>
       
   
      </ul>
      <div className="form-check form-switch">
  <input className="form-check-input"onClick={props.ToggleMode} type="checkbox"role="switch" id="flexSwitchCheckDefault"/>
  <label className={`form-check-label text-${props.mode1} htmlFor="flexSwitchCheckDefault"`}>Enable Dark Mode</label>
</div>
   
    </div>
  </div>
</nav>

   
   
  )
}

// To check wheter the value put satisfies your commands or not
  Navbar.propTypes = {
    title:  propTypes.string.isRequired,
    about: propTypes.string
  }

 // To set default value when no value is given
 Navbar.defaultProps = {
  title:"Title Here",
   about:'About Here'
 };



2-  Write final code using router components in App.js


import React, { useState } from 'react'

import './App.css';

import Navbar from './components/Navbar';
import Alert from './components/Alert';
import TextForm from './components/TextForm';
import About from './components/About';

import {
  BrowserRouter ,
  Routes,
  Route,
 
} from "react-router-dom";


function App() {
  //Using State to Generate dismissable alert
  const [alert, setAlert] = useState(null);

   const showAlert = (message, type) => {
    setAlert(
      {
        msg: message,
        type: type
      }
    )
    setTimeout(() => {
      setAlert(null);
    }, 1500);
  }


  // Using State to apply Dark Mode and Light Mode CSS
  const [Mode, setMode] = useState('light');
  const [Mode1, setMode1] = useState('dark');


  const toggleMode = () => {
    if (Mode === 'dark') {
      setMode("light");
      setMode1("dark");
      document.body.style.backgroundColor = 'white';
      showAlert('Light Mode is Enabled', 'Success:')

    }
    else {
      setMode("dark");
      setMode1("light")
      document.body.style.backgroundColor = 'indigo';
      showAlert('Dark Mode is Enabled', 'Success:')
    }

  }

  return (
   
 
 <BrowserRouter>
     

   <Navbar title="TextBox"about="About" mode={Mode} mode1={Mode1} ToggleMode={toggleMode} />
   <Alert alert={alert} />
     
<Routes>
         
       <Route  path="/about"element={<About />}>
       </Route>

      <Route  path="/"element={ <TextForm heading="Enter your text to analyse" mode={Mode} mode1={Mode1} ToggleMode={toggleMode} showAlert={showAlert} />}>
      </Route>
       
     </Routes>

 </BrowserRouter>
 );
}


export default App;



Image 1 - BrowserRouter


Image 2 - Home URL ("/")

Image 3 -  About URL ("/about")

Comments