DEV Community

mohandass
mohandass

Posted on

React Scenario Questions(useContext & useNavigate )

1. 1. Login Scenario: User enters name in Login page and goes to Dashboard page. Username should be visible in Dashboard. Which hook stores the username and which hook navigates to Dashboard?

PROGRAM:

App.jsx

import { Routes, Route } from "react-router-dom"
import { createContext, useState } from "react"
import Login from "./Login"
import Dashboard from "./Dashboard"

export const nameContext = createContext()

function App() {

  const [name, setName] = useState("")

  return (
    <nameContext.Provider value={{ name, setName }}>

      <Routes>
        <Route path="/" element={<Login />} />
        <Route path="/dashboard" element={<Dashboard />} />
      </Routes>

    </nameContext.Provider>
  )
}

export default App
Enter fullscreen mode Exit fullscreen mode

Login.jsx

import { useContext } from "react"
import { useNavigate } from "react-router-dom"
import { nameContext } from "./App"

function Login() {

  const { name, setName } = useContext(nameContext)

  const navigate = useNavigate()

  function LoginPage() {
    navigate("/dashboard")
  }

  return (
    <div>

      <h1>Login Page</h1>

      <input
        type="text"
        placeholder="Enter Name"
        value={name}
        onChange={(e) => setName(e.target.value)}
      />

      <button onClick={LoginPage}>
        Login
      </button>

    </div>
  )
}

export default Login
Enter fullscreen mode Exit fullscreen mode

Dashboard.jsx

import { useContext } from "react"
import { nameContext } from "./App"

function Dashboard() {

  const { name } = useContext(nameContext)

  return (
    <div>

      <h1>Dashboard</h1>

      <h2>Welcome {name}</h2>

    </div>
  )
}

export default Dashboard
Enter fullscreen mode Exit fullscreen mode

OUTPUT :

2. Logout Scenario: User clicks Logout in Dashboard and should go back to Login page. Login data should be cleared. Which hooks will you use?

PROGRAM:

App.jsx

import { BrowserRouter, Link, Route, Routes } from 'react-router-dom'
import Login from './Login'
import Dashboard from './Dashboard'
import { createContext, useState } from 'react'
import Profile from './Profile'
export const nameContext = createContext()
function App() {
  const [name, setName] = useState("")
  return (
    <div>
      <nameContext.Provider value={{ name, setName }}>
       <BrowserRouter>

        <Link to={"/"}>Login</Link>
        <Link to={"/dashboard"}>Dashboard</Link>


        <Routes>
          <Route path='/' element={<Login />} />
          <Route path='/dashboard' element={<Dashboard />} />

        </Routes>

      </BrowserRouter>
      </nameContext.Provider>

    </div>
  )
}

export default App
Enter fullscreen mode Exit fullscreen mode

Login.jsx

import React, { useContext, useEffect } from 'react'
import { nameContext } from './App'
import { useNavigate } from 'react-router-dom'

function Login() {

  const { setName } = useContext(nameContext)

  const navigate = useNavigate()

  function handleLogin() {

    navigate("/dashboard")

  }

  return (
    <div>

      <h1>Login Page</h1>

      <input
        type='text'
        placeholder='enter name'
        onChange={(e) => setName(e.target.value)}
      />

      <button onClick={handleLogin}>
       Login
      </button>



    </div>
  )
}

export default Login
Enter fullscreen mode Exit fullscreen mode

Dashboard.jsx

import React, { useContext } from 'react'
import { useNavigate } from 'react-router-dom'
import { nameContext } from './App'

const Dashboard = () => {

  const { name } = useContext(nameContext)

  const navigate = useNavigate()

  function handleLogout() {

    navigate("/")

  }

   function handleNext() {

    navigate("/profile")

  }

  return (
    <div>

      <h1>Welcome {name}</h1>

      <button onClick={handleLogout}>
        Logout  
      </button>

    </div>
  )
}

export default Dashboard
Enter fullscreen mode Exit fullscreen mode

OUTPUT :

3. Name Sharing Scenario: User enters name in Home page and Profile page shows the same name. How will you share the data between pages?

PROGRAM:

App.jsx

import { BrowserRouter, Link, Route, Routes } from 'react-router-dom'
import Login from './Login'
import Dashboard from './Dashboard'
import { createContext, useState } from 'react'
import Profile from './Profile'
export const nameContext = createContext()
function App() {
  const [name, setName] = useState("")
  return (
    <div>

      <nameContext.Provider value={{ name, setName }}>
       <BrowserRouter>

        <Link to={"/"}>Login</Link>
        <Link to={"/dashboard"}>Dashboard</Link>
        <Link to={"/profile"}>Profile</Link>

        <Routes>
          <Route path='/' element={<Login />} />
          <Route path='/dashboard' element={<Dashboard />} />
          <Route path='/profile' element={<Profile />} />
        </Routes>

      </BrowserRouter>
      </nameContext.Provider>

    </div>
  )
}

export default App
Enter fullscreen mode Exit fullscreen mode

Login.jsx

import React, { useContext, useEffect } from 'react'
import { nameContext } from './App'
import { useNavigate } from 'react-router-dom'

function Login() {

  const { setName } = useContext(nameContext)

  const navigate = useNavigate()

//   useEffect(() => {

//     console.log("Component Rendered")

//   }, [])

  function handleLogin() {

    navigate("/dashboard")

  }

  return (
    <div>

      <h1>Login Page</h1>

      <input
        type='text'
        placeholder='enter name'
        onChange={(e) => setName(e.target.value)}
      />

      <button onClick={handleLogin}>
       Login
      </button>



    </div>
  )
}

export default Login
Enter fullscreen mode Exit fullscreen mode

Dashboard.jsx

import React, { useContext } from 'react'
import { useNavigate } from 'react-router-dom'
import { nameContext } from './App'

const Dashboard = () => {

  const { name } = useContext(nameContext)

  const navigate = useNavigate()

  function handleLogout() {

    navigate("/")

  }

   function handleNext() {

    navigate("/profile")

  }

  return (
    <div>

      <h1>Welcome {name}</h1>

      <button onClick={handleLogout}>
        Logout  
      </button>
      <button onClick={handleNext}>Go To Profile</button>

    </div>
  )
}

export default Dashboard
Enter fullscreen mode Exit fullscreen mode

Profile.jsx

import React, { useContext } from 'react'
import { useNavigate } from 'react-router-dom'

import { nameContext } from './App'

function Profile() {
    const { name } = useContext(nameContext)
    const navigate = useNavigate()

    function handelBack(){
        navigate('/')
    }
  return (

    <div>
        <h1>{name} Profile</h1>

        </div>
  )
}
export default Profile

Enter fullscreen mode Exit fullscreen mode

OUTPUT :

4. Button Navigation Scenario: User clicks Next button in Home page and About page should open. Which hook will you use?

PROGRAM:

App.jsx

import { Routes, Route } from "react-router-dom"
import Home from "./Home"
import About from "./About"

function App() {

  return (

    <Routes>

      <Route path="/" element={<Home />} />

      <Route path="/about" element={<About />} />

    </Routes>

  )
}

export default App
Enter fullscreen mode Exit fullscreen mode

Home.jsx

import { useNavigate } from "react-router-dom"

function Home() {

  const navigate = useNavigate()

  function NextPage() {

    navigate("/about")

  }

  return (

    <div>

      <h1>Home Page</h1>

      <button onClick={NextPage}>
        Next
      </button>

    </div>

  )
}

export default Home
Enter fullscreen mode Exit fullscreen mode

About.jsx



function About() {

  return (

    <div>

      <h1>About Page</h1>

    </div>

  )
}

export default About
Enter fullscreen mode Exit fullscreen mode

OUTPUT :

5. Back Navigation Scenario: User moves from Home page to Details page and clicks Back button to return Home. How will you implement navigation?

PROGRAM:

App.jsx

import { BrowserRouter, Link, Route, Routes } from 'react-router-dom'
import Login from './Login'
import Dashboard from './Dashboard'
import { createContext, useState } from 'react'
import Profile from './Profile'
export const nameContext = createContext()
function App() {
  const [name, setName] = useState("")
  return (
    <div>

      <nameContext.Provider value={{ name, setName }}>
       <BrowserRouter>

        <Link to={"/"}>Login</Link>
        <Link to={"/dashboard"}>Dashboard</Link>
        <Link to={"/profile"}>Profile</Link>

        <Routes>
          <Route path='/' element={<Login />} />
          <Route path='/dashboard' element={<Dashboard />} />
          <Route path='/profile' element={<Profile />} />
        </Routes>

      </BrowserRouter>
      </nameContext.Provider>
      {/* <Login /> */}
    </div>
  )
}

export default App
Enter fullscreen mode Exit fullscreen mode

Profile.jsx

import React, { useContext } from 'react'
import { useNavigate } from 'react-router-dom'

import { nameContext } from './App'

function Profile() {
    const { name } = useContext(nameContext)
    const navigate = useNavigate()

    function handelBack(){
        navigate('/')
    }
  return (

    <div>
        <h1>{name} Profile</h1>
       <button onClick={handelBack}>Back</button>
        </div>
  )
}
export default Profile
Enter fullscreen mode Exit fullscreen mode

OUTPUT :

Top comments (0)