<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Rahil Vahora</title>
    <description>The latest articles on Forem by Rahil Vahora (@rahil1202).</description>
    <link>https://forem.com/rahil1202</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1722132%2F910b2ae0-37d0-42f6-abe3-065cf13ca871.jpeg</url>
      <title>Forem: Rahil Vahora</title>
      <link>https://forem.com/rahil1202</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rahil1202"/>
    <language>en</language>
    <item>
      <title>PDFWorkSpace (Local, In-Browser PDF toolkit) - Reaching 5k+ Users and What's Coming Next</title>
      <dc:creator>Rahil Vahora</dc:creator>
      <pubDate>Sat, 07 Mar 2026 11:34:24 +0000</pubDate>
      <link>https://forem.com/rahil1202/pdfworkspace-local-in-browser-pdf-toolkit-reaching-5k-users-and-whats-coming-next-27mj</link>
      <guid>https://forem.com/rahil1202/pdfworkspace-local-in-browser-pdf-toolkit-reaching-5k-users-and-whats-coming-next-27mj</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fleh0pbxsweki91nnr1jf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fleh0pbxsweki91nnr1jf.png" alt=" " width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few weeks ago I started building PDFWorkSpace — a simple tool to help people work with PDFs faster and in-browser so no need to upload your private document to someone else server.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Today the project crossed &lt;a href="https://x.com/rahil1202/status/2029173589602345347?s=20" rel="noopener noreferrer"&gt;5k+ users&lt;/a&gt;, which honestly feels surreal for something that started as a small side project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://pdfwork.space" rel="noopener noreferrer"&gt;pdfwork.space&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built PDFWorkSpce
&lt;/h2&gt;

&lt;p&gt;I kept running into the same annoying problem: most PDF tools online are either upload your private PDFs to servers, slow, bloated, or locked behind paywalls.&lt;/p&gt;

&lt;p&gt;So I decided to build something different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no-upload, no-server, no drama (privacy++)&lt;/li&gt;
&lt;li&gt;fast and simple&lt;/li&gt;
&lt;li&gt;focused on real use cases&lt;/li&gt;
&lt;li&gt;local, in-browser&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was straightforward: &lt;strong&gt;make working with PDFs frictionless&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Early Traction
&lt;/h2&gt;

&lt;p&gt;Over the past few weeks the platform reached:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;5,000+ users&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;steady organic traffic ( reddit, dev.io, whatsapp, discord )&lt;/li&gt;
&lt;li&gt;users from multiple countries&lt;/li&gt;
&lt;li&gt;consistent daily usage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of the growth has been organic, which is the best validation you can get when building a product.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Coming in V2
&lt;/h2&gt;

&lt;p&gt;We’re currently working on &lt;strong&gt;PDFWork V2&lt;/strong&gt;, which will launch once we hit &lt;strong&gt;7,000 users&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;V2 will introduce one of the &lt;strong&gt;most powerful features for working with PDFs&lt;/strong&gt;, designed to make document workflows significantly easier.&lt;/p&gt;

&lt;p&gt;I can’t reveal everything yet, but the goal is to push PDF tools beyond the usual “merge/split/compress” utilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons From Building This
&lt;/h2&gt;

&lt;p&gt;A few things became very clear while building this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;People still need &lt;strong&gt;simple tools that just work&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Speed matters more than feature overload&lt;/li&gt;
&lt;li&gt;Shipping fast is better than waiting for perfection&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Small tools solving real problems can reach users surprisingly quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;If you work with PDFs often, give it a try:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pdfwork.space" rel="noopener noreferrer"&gt;https://pdfwork.space&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback is always welcome.&lt;/p&gt;

&lt;p&gt;And if you’re building something yourself — keep shipping.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6wscwqbpm4olzc0caugm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6wscwqbpm4olzc0caugm.png" alt=" " width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>privacy</category>
      <category>pwa</category>
      <category>react</category>
    </item>
    <item>
      <title>Build a Client-Side PDF Engine with GitHub Copilot CLI</title>
      <dc:creator>Rahil Vahora</dc:creator>
      <pubDate>Sat, 14 Feb 2026 11:38:50 +0000</pubDate>
      <link>https://forem.com/rahil1202/build-a-client-side-pdf-engine-with-github-copilot-cli-256m</link>
      <guid>https://forem.com/rahil1202/build-a-client-side-pdf-engine-with-github-copilot-cli-256m</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://www.pdfwork.space" rel="noopener noreferrer"&gt;pdfwork.space&lt;/a&gt;&lt;br&gt;
 — a fully client-side PDF editing and processing toolkit that runs entirely inside the browser, locally.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No uploads.&lt;/li&gt;
&lt;li&gt;No backend document processing, (You can check devtools, network tab)&lt;/li&gt;
&lt;li&gt;No sensitive file leaving your device.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most online PDF tools upload your sensitive documents to their servers. Even with deletion promises, your files are processed elsewhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://pdfwork.space" rel="noopener noreferrer"&gt;pdfwork.space&lt;/a&gt; removes that layer completely.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Core Features :
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Edit PDF visually, literally do anything&lt;/li&gt;
&lt;li&gt;Convert PDF to any format&lt;/li&gt;
&lt;li&gt;Convert any format to PDF&lt;/li&gt;
&lt;li&gt;Merge multiple PDFs&lt;/li&gt;
&lt;li&gt;Split PDFs by page range&lt;/li&gt;
&lt;li&gt;Compress large PDFs&lt;/li&gt;
&lt;li&gt;Page-level editing &amp;amp; manipulation&lt;/li&gt;
&lt;li&gt;Drag-and-drop workflow&lt;/li&gt;
&lt;li&gt;Offline-first experience&lt;/li&gt;
&lt;li&gt;SEO and performance optimized&lt;/li&gt;
&lt;li&gt;Bring your API and do anything with PDF(Chat, Q&amp;amp;A, Summarize, etc)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Advanced Feature: Worker-Powered Batch Tools
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;One of the most important engineering decisions was implementing a Web Worker–based batch processing system.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This allows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Running multiple PDF operations in parallel&lt;/li&gt;
&lt;li&gt;Heavy processing without freezing the UI&lt;/li&gt;
&lt;li&gt;Smooth experience even with large files&lt;/li&gt;
&lt;li&gt;Scalable architecture for future expansion&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Checkout live : &lt;a href="https://pdfwork.space" rel="noopener noreferrer"&gt;Pdf WorkSpace&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ejns5d0so9517ea9ljr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ejns5d0so9517ea9ljr.png" alt="Landing Page" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fovfycmc7yfppjnolm1ht.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fovfycmc7yfppjnolm1ht.png" alt="PDF Tools" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95v0jo4atu9j9h3iimnx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95v0jo4atu9j9h3iimnx.png" alt="Why PDF WorkSpace" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjodwbvhbl841prxw221p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjodwbvhbl841prxw221p.png" alt="How PDF WorkSpace Works" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot CLI had a direct architectural impact on this project.&lt;/p&gt;

&lt;p&gt;It wasn’t just autocomplete — it helped accelerate thinking and experimentation.&lt;/p&gt;

&lt;p&gt;Copilot CLI assisted with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Helping me to take architecture decision faster and with real-scenario examples&lt;/li&gt;
&lt;li&gt;Designing and structuring the Web Worker batch processing architecture&lt;/li&gt;
&lt;li&gt;Generating optimized scaffolding for complex client-side file handling&lt;/li&gt;
&lt;li&gt;Refactoring performance-critical sections faster&lt;/li&gt;
&lt;li&gt;Improving SEO and Lighthouse score after applying a focused prompt&lt;/li&gt;
&lt;li&gt;Iterating on improvements directly from the terminal without breaking flow&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;One of my favorite moments was improving performance and SEO significantly after applying a simple, well-structured Copilot CLI prompt. It saved time I would otherwise spend manually researching and testing optimizations.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Copilot CLI felt less like a helper and more like a productivity multiplier — especially when working on complex browser APIs and performance tuning.&lt;/p&gt;




&lt;h3&gt;
  
  
  A Small Tip from My Side (Developer to Developer)
&lt;/h3&gt;

&lt;p&gt;Use Copilot CLI beyond generation — use it for validation and optimization.&lt;/p&gt;

&lt;p&gt;Feed it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lighthouse reports&lt;/li&gt;
&lt;li&gt;Performance bottlenecks&lt;/li&gt;
&lt;li&gt;Large functions for refactor suggestions&lt;/li&gt;
&lt;li&gt;Architecture snippets for improvement&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>A go-to backend template for express</title>
      <dc:creator>Rahil Vahora</dc:creator>
      <pubDate>Mon, 16 Jun 2025 13:16:49 +0000</pubDate>
      <link>https://forem.com/rahil1202/a-go-to-backend-template-for-express-ci6</link>
      <guid>https://forem.com/rahil1202/a-go-to-backend-template-for-express-ci6</guid>
      <description>&lt;p&gt;🚀 &lt;strong&gt;Just launched a go-to backend template for startups!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Over the last few weeks, I put together a clean, production-ready boilerplate to speed up backend development for any startup idea. If you're tired of repeating the same setup for every project—this one's for you.&lt;/p&gt;

&lt;p&gt;🧱 &lt;strong&gt;Tech Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Express.js + TypeScript&lt;/li&gt;
&lt;li&gt;PostgreSQL + Prisma ORM&lt;/li&gt;
&lt;li&gt;Zod validation&lt;/li&gt;
&lt;li&gt;JWT Auth + Nodemailer&lt;/li&gt;
&lt;li&gt;Helmet, CORS, Rate Limiter, HPP for security&lt;/li&gt;
&lt;li&gt;Swagger Docs + Prettier + ESLint + Husky&lt;/li&gt;
&lt;li&gt;Hot reload, clean folder structure, and more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔧 &lt;strong&gt;Ready out of the box with&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secure Auth flows&lt;/li&gt;
&lt;li&gt;Email template support&lt;/li&gt;
&lt;li&gt;Rate-limiting&lt;/li&gt;
&lt;li&gt;Linting, formatting, and Git hooks&lt;/li&gt;
&lt;li&gt;Prisma + PostgreSQL integration&lt;/li&gt;
&lt;li&gt;.env setup, nodemon/tsx/ts-node-dev modes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📂 Clean folder structure and full documentation included.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Check it out on GitHub:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/rahil1202/backend-express-prisma-typescript-template" rel="noopener noreferrer"&gt;https://github.com/rahil1202/backend-express-prisma-typescript-template&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love feedback or contributions! 🛠️&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to Redirect Users Dynamically and Pass State Like a Pro</title>
      <dc:creator>Rahil Vahora</dc:creator>
      <pubDate>Tue, 18 Feb 2025 13:47:48 +0000</pubDate>
      <link>https://forem.com/rahil1202/how-to-redirect-users-dynamically-and-pass-state-like-a-pro-1n1b</link>
      <guid>https://forem.com/rahil1202/how-to-redirect-users-dynamically-and-pass-state-like-a-pro-1n1b</guid>
      <description>&lt;p&gt;Mastering React Router: &lt;code&gt;useNavigate&lt;/code&gt; &amp;amp; &lt;code&gt;useLocation&lt;/code&gt; for Seamless Navigation&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;🔹 Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In modern &lt;strong&gt;React applications&lt;/strong&gt;, handling &lt;strong&gt;dynamic navigation and redirections&lt;/strong&gt; is a must. Imagine this scenario:  &lt;/p&gt;

&lt;p&gt;🔹 A &lt;strong&gt;user tries to apply on the job link&lt;/strong&gt; without logging in.&lt;br&gt;&lt;br&gt;
🔹 They are &lt;strong&gt;redirected to the login page&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
🔹 After login, they &lt;strong&gt;should return to their job application page&lt;/strong&gt; but guess what they land on the home page.  &lt;/p&gt;

&lt;p&gt;To achieve this, React Router provides &lt;strong&gt;two powerful hooks&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;&lt;code&gt;useNavigate&lt;/code&gt;&lt;/strong&gt; - For programmatic navigation.&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;&lt;code&gt;useLocation&lt;/code&gt;&lt;/strong&gt; - To access the current route and retrieve stored state.  &lt;/p&gt;

&lt;p&gt;In this article, we’ll explore &lt;strong&gt;why &lt;code&gt;useNavigate&lt;/code&gt; and &lt;code&gt;useLocation&lt;/code&gt; are essential&lt;/strong&gt;, how they work, and &lt;strong&gt;how to use them to store and retrieve state during redirections.&lt;/strong&gt;  &lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;🚀 What is &lt;code&gt;useNavigate&lt;/code&gt;?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;useNavigate&lt;/code&gt; is a &lt;strong&gt;React Router hook&lt;/strong&gt; that allows you to &lt;strong&gt;programmatically navigate between pages&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;📌 Basic Usage&lt;/strong&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useNavigate&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-router-dom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;navigate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useNavigate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="nx"&gt;Page&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;navigate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/dashboard&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Go&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;Dashboard&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;✅ Clicking the button &lt;strong&gt;redirects the user to &lt;code&gt;/dashboard&lt;/code&gt;&lt;/strong&gt;.  &lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;📌 Navigating with State&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Sometimes, we want to &lt;strong&gt;pass additional data&lt;/strong&gt; when navigating.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;navigate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/dashboard&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;🚀 What is &lt;code&gt;useLocation&lt;/code&gt;?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;useLocation&lt;/code&gt; lets us &lt;strong&gt;access the current route details&lt;/strong&gt;, including:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;pathname&lt;/code&gt;&lt;/strong&gt; – The current page URL.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;state&lt;/code&gt;&lt;/strong&gt; – Data stored when navigating.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;📌 Basic Usage&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useLocation&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-router-dom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Dashboard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useLocation&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Dashboard&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Current&lt;/span&gt; &lt;span class="na"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Data&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nx"&gt;Previous&lt;/span&gt; &lt;span class="na"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ If navigated using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;navigate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/dashboard&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📌 The dashboard &lt;strong&gt;retrieves the user data&lt;/strong&gt; from &lt;code&gt;location.state&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;🚀 Real-World Example: Redirecting Users After Login&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Let's say a &lt;strong&gt;job portal&lt;/strong&gt; allows users to &lt;strong&gt;apply for jobs&lt;/strong&gt;, but they &lt;strong&gt;must log in first&lt;/strong&gt;.  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;🛠 Scenario&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;1️⃣ A &lt;strong&gt;user clicks "Apply for Job"&lt;/strong&gt; but is not logged in.&lt;br&gt;&lt;br&gt;
2️⃣ They are &lt;strong&gt;redirected to the login page&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
3️⃣ After login, they &lt;strong&gt;should return to the job application page&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;🔹 Step 1: Store Intended Route Before Redirecting (&lt;code&gt;JobDetails.js&lt;/code&gt;)&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useNavigate&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-router-dom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;JobDetails&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;navigate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useNavigate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleApply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;navigate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/login&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;redirectTo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/job-details/123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Software&lt;/span&gt; &lt;span class="nx"&gt;Engineer&lt;/span&gt; &lt;span class="nx"&gt;Job&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleApply&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Apply&lt;/span&gt; &lt;span class="nx"&gt;Now&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;JobDetails&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ &lt;strong&gt;What Happens?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The user &lt;strong&gt;is redirected to &lt;code&gt;/login&lt;/code&gt;&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;intended route&lt;/strong&gt; (&lt;code&gt;/job-details/123&lt;/code&gt;) is &lt;strong&gt;stored in &lt;code&gt;location.state&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;🔹 Step 2: Retrieve Stored Route After Login (&lt;code&gt;Login.js&lt;/code&gt;)&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useNavigate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useLocation&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-router-dom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useContext&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;authContext&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../context/AuthContext&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Login&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;navigate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useNavigate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useLocation&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;login&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;authContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;redirectTo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;redirectTo&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleLogin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mockAccessToken&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Simulating login&lt;/span&gt;
        &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Login successful!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="nf"&gt;navigate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;redirectTo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Login&lt;/span&gt; &lt;span class="nx"&gt;Page&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleLogin&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Login&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Login&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ &lt;strong&gt;What Happens?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;location.state?.redirectTo&lt;/code&gt; retrieves the &lt;strong&gt;intended page&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;If it exists, the user is redirected back to &lt;strong&gt;&lt;code&gt;/job-details/123&lt;/code&gt;&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;If no stored state, the user &lt;strong&gt;goes to the homepage (&lt;code&gt;/&lt;/code&gt;)&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;🔥 Summary: How &lt;code&gt;useNavigate&lt;/code&gt; and &lt;code&gt;useLocation&lt;/code&gt; Work Together&lt;/strong&gt;
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Step&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Action&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Stored Data&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Accessed Via&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1️⃣&lt;/td&gt;
&lt;td&gt;User clicks "Apply Now"&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{ redirectTo: "/job-details/123" }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;useNavigate("/login", { state: { redirectTo: "/job-details/123" } })&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2️⃣&lt;/td&gt;
&lt;td&gt;User is redirected to &lt;code&gt;/login&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;{ redirectTo: "/job-details/123" }&lt;/code&gt; is stored&lt;/td&gt;
&lt;td&gt;Available in &lt;code&gt;useLocation().state&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3️⃣&lt;/td&gt;
&lt;td&gt;After login, user is redirected back&lt;/td&gt;
&lt;td&gt;`location.state?.redirectTo&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;🔥 Example: Passing Product Data Instead of Redirects&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Instead of passing &lt;strong&gt;redirection paths&lt;/strong&gt;, we can pass &lt;strong&gt;other state values&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;📌 Step 1: Send Product Data ({% raw %}&lt;code&gt;Product.js&lt;/code&gt;)&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;navigate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/checkout&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;productId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;299&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;📌 Step 2: Retrieve Data (&lt;code&gt;Checkout.js&lt;/code&gt;)&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useLocation&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;productId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ No &lt;strong&gt;global state&lt;/strong&gt; or &lt;strong&gt;URL parameters&lt;/strong&gt; needed!&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;🎯 Final Thoughts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;React Router’s &lt;strong&gt;&lt;code&gt;useNavigate&lt;/code&gt; and &lt;code&gt;useLocation&lt;/code&gt;&lt;/strong&gt; are essential for:&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Redirecting users dynamically&lt;/strong&gt; (e.g., after login).&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Storing &amp;amp; retrieving state without global state management&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Passing data between components easily&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Now that you understand these hooks, how will you use them in your next React project?&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;🔥 &lt;strong&gt;Drop a comment below if you have any questions!&lt;/strong&gt; 🚀  &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
