Matt

How to Set up a React Webpack Application

Building modern web applications often means working with powerful tools that help you organize, optimize, and streamline your development process. Webpack is one such tool, a module bundler that takes your JavaScript code and its dependencies and packages them into a format ready for the browser. React is a fantastic library for creating dynamic and interactive user interfaces. In this guide, we’ll walk you through setting up a React project with Webpack, even if you’re new to these technologies.

What You’ll Need

  • Node.js and npm (or yarn): These are essential for working with JavaScript projects. If you don’t have them installed, download them from the Node.js website https://nodejs.org/.

Project Setup

  1. Create a Folder: Start by creating a new directory for your project and open a terminal window in that directory.
  2. Initialize Your Project: Run the following command to create a package.json file, which will manage your project’s dependencies:
  3. Bash
  4. npm init -y

Install Dependencies

Let’s install the necessary packages:

Bash

npm install react react-dom webpack webpack-cli webpack-dev-server –save-dev

  • React and ReactDOM: The core libraries for building React components.
  • Webpack and webpack-cli: Webpack itself and the command-line tools for working with it.
  • webpack-dev-server: A handy development server for testing your app.

Webpack Configuration (webpack.config.js)

  1. Create the Configuration File: Create a file named webpack.config.js at the root of your project. Here’s a basic configuration to get you started:
  2. JavaScript
  3. const path = require(‘path’);
  4. module.exports = {
  5.     entry: ‘./src/index.js’, 
  6.     output: {
  7.         path: path.resolve(__dirname, ‘dist’), 
  8.         filename: ‘bundle.js’ 
  9.     },
  10.     module: {
  11.         rules: [
  12.             {
  13.                 test: /\.(js|jsx)$/,
  14.                 exclude: /node_modules/,
  15.                 use: {
  16.                     loader: ‘babel-loader’
  17.                 }
  18.             }
  19.         ]
  20.     }
  21. };
  1. Explanation
    • entry: The starting point for your application (typically index.js)
    • output: Where Webpack should put the bundled code (here, a dist folder).
    • module.rules: This tells Webpack how to handle different file types. Our rule uses babel-loader to process JavaScript and JSX (React) files.

Basic React Setup

  1. Project Structure: Create a src folder and inside it, files named index.js and App.js.
  2. App Component (App.js):
  3. JavaScript
  4. import React from ‘react’;
  5. function App() {
  6.     return <h1>Hello from React and Webpack!</h1>;
  7. }
  8. export default App;
  1. Entry Point (index.js):
  2. JavaScript
  3. import React from ‘react’;
  4. import ReactDOM from ‘react-dom/client’;
  5. import App from ‘./App’;
  6. const root = ReactDOM.createRoot(document.getElementById(‘root’));
  7. root.render(<App />);

Next Steps

  • Adding CSS: Explore Webpack’s CSS loaders (like style-loader and css-loader) to style your components.
  • Hot Module Replacement (HMR): Learn about HMR for seamless development updates.
  • Linting with ESLint: Keep your code clean and consistent with a linter.
  • Production Optimization: Prepare your project for deployment with Webpack’s production-focused features.

 

Conditional Rendering Basics in React

One of the core strengths of React lies in its ability to create dynamic and interactive user interfaces. Conditional rendering is a fundamental technique that allows you to control the display of elements or components based on specific conditions within your application. Whether you’re building a simple website or a complex app, conditional rendering will be essential in your React toolkit.

Why Do We Need Conditional Rendering?

1. Dynamic User Interfaces

  • Adapting to User State: Imagine you’re building an e-commerce site. If a user isn’t logged in, you’d want to display options to “Sign In” or “Create Account.” Once they’re logged in, those options should switch to “My Account” or “Log Out.” Conditional rendering lets you control what the user sees based on their authentication status.
  • Responding to Data Changes: Your application might fetch data from an API. While that data loads, you want to show a “Loading…” message. Once the data arrives, you conditionally replace the loading message with the actual content.

2. User Experience (UX) Improvements

  • Personalization: You can tailor content based on user preferences or previous actions. For example, a news website might display a “Recommended For You” section based on the user’s reading history, determined by conditional logic.
  • Contextual Guidance: Providing instructions, help text, or tooltips only in specific situations can reduce information overload. For instance, you might show additional help text on a complex form when a user hovers over a particularly tricky field.

3. Performance Optimization

  • Selective Rendering: By conditionally rendering, you can prevent React from unnecessarily creating and updating elements in the DOM that aren’t currently needed. This can lead to performance gains in larger applications with complex UI structures, as rendering components can be computationally expensive.

4. Code Maintainability

  • Component Separation: Conditional rendering often encourages you to break down larger components into smaller, more focused ones. This improves readability and makes it easier to manage and reason about your codebase.
  • Clearer Logic: Explicitly stating the conditions that determine what is displayed helps you (and other developers) quickly understand what your components are doing under different circumstances.

Methods of Conditional Rendering in React

There are several ways to achieve conditional rendering in your React applications. Let’s explore the most common ones:

1. If/Else Statements

The most straightforward approach is using plain JavaScript if and else statements within your components’ JSX.

JavaScript

function UserGreeting(props) {

  if (props.isLoggedIn) {

    return <h1>Welcome Back!</h1>;

  } else {

    return <h1>Please Log In.</h1>;

  }

}

2. Ternary Operator

For shorter conditional expressions, the ternary operator offers a more concise syntax:

JavaScript

function UserStatus(props) {

  return (

    <p>You are currently: {props.isLoggedIn ? ‘Logged In’ : ‘Logged Out’}</p>

  );

}

3. Logical && operator

This method is useful when you want to render something only if a condition is true:

JavaScript

function ShoppingCart(props) {

  return (

    <div>

      <h1>Shopping Cart</h1>

      {props.items.length > 0 && (

          <p>You have {props.items.length} items in your cart.</p>

      )}

    </div>   

  );

}

4. Component Extraction

As your conditional logic becomes more complex, extracting conditional parts into separate components can often improve readability and code organization:

JavaScript

function LoggedInButton() {

  return <button>Log Out</button>;

}

function LoggedOutButton() {

  return <button>Log In</button>;

}

function UserPanel(props) {

  return (

    <div>

      {props.isLoggedIn ? <LoggedInButton /> : <LoggedOutButton />}

    </div>

  );

}

Choosing the Right Method

  • For simple if/else scenarios, both if/else statements and the ternary operator are great.
  • The logical && operator is well-suited for conditionally rendering a single element.
  • When the logic gets more complex, breaking down your UI into smaller, reusable components improves maintainability.

Wrapping Up

Selecting the right conditional rendering method is important for creating clean React code. For simple “this or that” scenarios, if/else statements or the ternary operator are perfectly suitable. The logical AND (&&) operator is ideal when you only want to display a single element if a condition is true. As your logic gets more complex, break out different conditional cases into smaller components. This keeps your code organized, readable, and easier to maintain as your application grows. Prioritize the method that makes your code the most understandable, considering the current complexity and how it might evolve.

Using GraphQL in your Gatsby sites

Gatsby is a fantastic tool for building blazing-fast static websites. GraphQL simplifies how you manage data in your Gatsby projects, letting you fetch exactly what you need. Let’s dive in and get you started!

What is GraphQL?

  • The Problem It Solves: Traditional ways of fetching data can lead to getting too much or too little data. GraphQL lets you ask for only the specific fields you need.
  • Queries Define Your Data: With GraphQL, you write queries that match the shape of the data you want to receive.

Why GraphQL + Gatsby are a Perfect Pair

  • Built for Performance: Gatsby uses GraphQL to optimize data fetching, making your websites super fast.
  • Flexible Data Sourcing: Gatsby has plugins to pull data into GraphQL from a variety of sources (CMSs, markdown, databases, and more).

Setting Up GraphQL in Your Gatsby Project

  1. Installation:
  2. Bash
  3. npm install gatsby-source-graphql 
  1. Configuration (gatsby-config.js) Provide a minimal example, assuming a basic GraphQL endpoint:
  2. JavaScript
  3. // gatsby-config.js
  4. module.exports = {
  5.   plugins: [
  6.     {
  7.       resolve: `gatsby-source-graphql`,
  8.       options: {
  9.         typeName: `MySource`, // Replace with your source name
  10.         fieldName: `myData`, // Replace with how you’ll refer to this data
  11.         url: `https://my-graphql-endpoint.com`, 
  12.       },
  13.     },
  14.   ],
  15. };

Using GraphQL Data in Your Components

  • The useStaticQuery Hook: Gatsby provides this hook to query GraphQL data.
  • Example Component:
  • JavaScript
  • import React from ‘react’;
  • import { useStaticQuery, graphql } from ‘gatsby’;
  • const BlogPost = () => {
  •   const data = useStaticQuery(graphql`
  •     query {
  •       myData { 
  •         title
  •         content 
  •       }
  •     }
  •   `);
  •   return (
  •     <div>
  •       <h1>{data.myData.title}</h1>
  •       <p>{data.myData.content}</p>
  •     </div>
  •   );
  • };
  • export default BlogPost; 

Conclusion

This is just the beginning of your GraphQL and Gatsby journey! Experiment with it in your projects to see how it improves your development experience.

The Ultimate Guide to CSS Units

Ever wondered how websites magically fit on screens of all sizes? Or how can you adjust your text size if someone zooms in? The secret lies in mastering CSS units. In this guide, we’ll demystify units and help you choose the right ones to build stunning, adaptable layouts.

Absolute Units – The Fixed Sizes

Let’s start with absolute units. They have a fixed size, regardless of screen or other elements. The most common one is the pixel (px), but there are others like inches (in), centimeters (cm), and points (pt).

  • Pros: Easy to grasp and ideal for print stylesheets where physical size matters.
  • Cons: Inflexible for varied screen sizes. Using too many absolute units can make your website look awkward on smaller or larger displays.

Example:

CSS

.my-image {

  width: 500px; 

}

This code keeps .my-image at 500 pixels wide, no matter what.

Relative Units – Adapting to the Environment

This is where things get exciting! Relative units scale in relation to other things. Meet the stars:

  • rem: Relative to the current element’s font size.
  • Why They’re Awesome:  These help you build responsive websites, ensuring your content looks great on any device. They’re also good for accessibility!

Examples:

  • CSS
  • p { 
  •   font-size: 1.2rem; /* 20% larger than the base font size */
  • }
  • CSS
  • .sidebar {
  •   max-width: 30%; /* Takes up a maximum of 30% of its parent container */
  • }

Choosing the Right Unit (The Decision-Making Part)

So, how to pick the right tool for the job? Here’s a quick guide:

  • Pixels (px):  Precision work (thin borders, fixed-size icons)
  • Percentages (%):  Flexible layouts (e.g., making columns take up a certain percentage of their container).
  • rem:  Global scaling (base font size, consistent margins throughout your site).
  • Viewport units (vw, vh): Elements that relate to the screen size (full-screen sections, large headings that scale with the window).
  • Watch Out! Be careful with nesting relative units like them within them. It can lead to unexpectedly large or tiny elements.

Units in Action – Real-World Use Cases

  • Responsive Layout Recipe:
  • CSS
  • .container {
  •   max-width: 90%; 
  •   margin: 0 auto; 
  • }
  • .column {
  •   width: 30%;
  •   float: left;
  •   margin: 1rem; 
  • }
  • This, along with some media queries, builds a basic multi-column layout.
  • User-Friendly Text:  Use relative font sizes (em or rem) to allow people with visual impairments to zoom in on your text more easily.

Conclusion

Think of CSS units as your layout toolkit. Here’s a handy cheat sheet:

  • px: Fixed sizes
  • em: Relative to the current font size
  • rem: Relative to the root font size
  • %: Relative to the parent element
  • vw/vh: Relative to the viewport width/height

The more you practice, the more intuitive it becomes. Inspect the code of websites you admire to see how they use units!

Top 10 Apps to Build When Learning Web Development

When you’re learning web development, the excitement of new technologies and concepts is undeniable. But one of the best ways to solidify your skills? Building real projects! It’s more than just following tutorials; it’s putting what you’ve learned into practice and making something tangible. This post provides project ideas from web dev basics to portfolio-worthy creations. Remember, you can tailor the technologies to match your interests!

Beginner-Friendly Foundations

Click Here for my favorite way to learn how to code

  • Project 1: Todo List
    • Why It’s Great: Perfect for grasping JavaScript fundamentals, DOM manipulation, and local data storage (saving those to-dos!).
    • Skill Boost: JavaScript logic, event handling, working with arrays/objects.
  • Project 2: Portfolio Website
    • Why It’s Great: Introduces you to the fundamentals of HTML, CSS, and responsive design principles.
    • Skill Boost: Content organization, CSS styling, understanding how to make your site look good on different devices.
  • Project 3: Recipe Blog/Collection
    • Why It’s Great: If you want to store recipes in a simple database, practice organizing content, layout, and potentially a touch of backend.
    • Skill Boost: Information architecture, potentially some basic server-side logic.

Building Core Competencies

  • Project 4: Weather App
    • Why It’s Great: Learn to work with external APIs, fetch real-time data, and practice dynamic UI updates.
    • Skill Boost: API consumption, handling asynchronous data, UI design focused on data display.
  • Project 5: Basic Chat App
    • Why It’s Great: Introduction to real-time concepts (WebSockets or similar).
    • Skill Boost: Data synchronization, state management, potentially backend with user accounts.
  • Project 6: Interactive Quiz or Game
    • Why It’s Great: Solidifies JavaScript logic and state management, plus it’s fun!
    • Skill Boost: Event handling, conditional logic, potentially a UI library like React for complex game interfaces.

Level Up and Showcase

  • Project 7: Minimalist E-commerce Store
    • Why It’s Great: Build product listings with a basic cart system and explore potential backend needs for handling orders.
    • Skill Boost: Frontend UI for product cart management, likely involving backend technologies and a database.
  • Project 8: Social Media Clone (Simplified)
    • Why It’s Great: Tackle complex UI, user feeds, interactions (likes, comments), and authentication.
    • Skill Boost: Frontend component structure, backend user handling, data relationships.
  • Project 9: Data Visualization Dashboard
    • Why It’s Great: Work with data libraries (like D3.js or Chart.js) and create meaningful visuals.
    • Skill Boost: Data manipulation, charting components, UI focused on information clarity.
  • Project 10: Contribution to an Open-Source Project
    • Why It’s Great: Real-world experience, collaboration with other devs, enhancing bug-fixing and feature-building skills.
    • Skill Boost: Understanding large codebases, Git workflow, and potential for varied technologies.

Conclusion

This collection of projects offers a roadmap for growth. Adapt them, use your favorite frontend and backend frameworks, and challenge yourself! Building consistently is vital. Remember, impressive portfolios are built on iteration and the willingness to learn along the way.

Parcel Basic Setup for JS and React

Let’s face it, setting up web projects can be a pain. Between finicky build tools and endless configuration files, the word “Webpack” might send a shiver down your spine. But what if I told you that there’s a way to get your projects up and running with almost no setup? Enter Parcel.js, the zero-configuration web application bundler.

What is Parcel.js?

Parcel.js is a super-fast bundler that aims to make web development a breeze. With Parcel, you can focus on building your application and let it handle the nitty-gritty details of asset bundling, code transformations, and setting up a development server. That means no more lengthy webpack configurations!

Setting the Stage

Before we dive in, make sure you have the following prerequisites:

  • Node.js and npm (or yarn): You can download these from the official Node.js website (https://nodejs.org).

Let’s install Parcel globally to have it ready whenever you start a new project:

Bash

npm install -g parcel-bundler

Your First Vanilla JavaScript App

  1. Project Setup:
  • Create a new project folder:
  • Bash
  • mkdir my-parcel-project
  • cd my-parcel-project
  • Initialize your project with npm:
  • Bash
  • npm init -y
  • Create the following files:
      • index.html
      • index.js
    • styles.css
  1. Basic Boilerplate:
  • index.html
  • HTML
  • <!DOCTYPE html>
  • <html>
  • <head>
  •   <title>My Parcel App</title>
  •   <link rel=”stylesheet” href=”styles.css”>
  • </head>
  • <body>
  •   <div id=”app”></div>
  •   <script src=”index.js”></script>
  • </body>
  • </html>
  • index.js
  • JavaScript
  • const appDiv = document.getElementById(‘app’);
  • appDiv.innerHTML = ‘<h1>Hello from Parcel!</h1>’;
  • styles.css
  • CSS
  • body {
  •   font-family: sans-serif;
  •   margin: 20px;
  • }
  1. Parcel in Action
  2. Now for the magic! Start Parcel’s development server:
  3. Bash
  4. parcel index.html 
  1. Open your web browser and go to http://localhost:1234/. You should see your “Hello from Parcel!” message proudly displayed. Make a change in any of your files, save, and see your browser update instantly – that’s Parcel’s hot reloading!

Section 3: Adding React to the Mix

  1. Installing Dependencies:
  2. Bash
  3. npm install react react-dom
  1. Converting to a React Structure
  • Create a components folder and add a simple component file (e.g., MyComponent.jsx):
  • JavaScript
  • import React from ‘react’;
  • const MyComponent = () => {
  •   return (
  •     <div>
  •       <h2>Hello from my React component!</h2>
  •     </div>
  •   );
  • };
  • export default MyComponent;
  • Modify index.js:
  • JavaScript
  • import React from ‘react’;
  • import ReactDOM from ‘react-dom/client’;
  • import MyComponent from ‘./components/MyComponent’;
  • const root = ReactDOM.createRoot(document.getElementById(‘app’));
  • root.render(<MyComponent />);
  1. Let Parcel Work Its Magic
  2. No extra configuration is needed. Run your parcel index.html command again, and your React app is ready!

Section 4: Deployment Made Easy (Netlify)

Check out Netlify! It’s a fantastic way to host your projects:

  1. Create a Netlify account: https://netlify.com
  2. Deploy: Link your GitHub repo or drag-and-drop your project files.

Conclusion

Parcel.js simplifies web app development. Give it a try on your next project, especially if you’re looking for a quick setup. Keep exploring – Parcel supports even more like Sass, image optimization, and more!

Create a blog with Netlify CMS and Gatsby

If you love the speed and developer experience of the Jamstack, this guide’s for you. We’ll combine the intuitive content editing of Netlify CMS with the React-powered framework, Gatsby, to build a blazing-fast blog. If you’re interested in learning more about Netlify’s CMS, click here for our deep dive.

Prerequisites

  • Basic familiarity with JavaScript, React, and Git
  • A Node.js installation (https://nodejs.org/)
  • A GitHub account
  • A Netlify account

Part 1: Project Setup

  1. Install Gatsby CLI:
  2. Bash
  3. npm install -g gatsby-cli
  4. Use code with caution.
  5. content_copy
  6. Create a Gatsby Project:
  7. Bash
  8. gatsby new my-awesome-blog
  9. cd my-awesome-blog

 

  1. Install Netlify CMS Dependencies:
  2. Bash
  3. npm install netlify-cms-app gatsby-plugin-netlify-cms

Part 2: Netlify CMS Configuration

  1. Create a Configuration File (config.yml)
  2. Create a file named static/admin/config.yml. Here’s a basic example:
  3. YAML
  4. backend:
  5.   name: git-gateway
  6.   branch: main 
  7. media_folder: static/img
  8. public_folder: /img
  9. collections: 
  10.   – name: “blog” 
  11.     label: “Blog Posts” 
  12.     folder: “src/posts” 
  13.     create: true  
  14.     slug: “{{year}}-{{month}}-{{day}}-{{slug}}” 
  15.     fields: 
  16.       – { label: “Title”, name: “title”, widget: “string” } 
  17.       – { label: “Publish Date”, name: “date”, widget: “datetime” } 
  18.       – { label: “Body”, name: “body”, widget: “markdown” } 

 

  1. Important Notes:
    • Customize carefully: Adjust the media_folder, public_folder, collections, and fields to match your desired blog structure.
    • More field types: Netlify CMS supports images, lists, and more: (https://www.netlifycms.org/docs/widgets/)
  1. Update gatsby-config.js:
  2. JavaScript
  3. module.exports = {
  4.   // … existing config
  5.   plugins: [
  6.     // … other plugins,
  7.     ‘gatsby-plugin-netlify-cms’
  8.   ]
  9. }

Part 3: Creating Blog Post Templates

  1. Create a Template: Create a file like src/templates/blog-post.js:
  2. JavaScript
  3. import React from ‘react’
  4. import { graphql } from ‘gatsby’
  5. const BlogPost = ({ data }) => {
  6.   const post = data.markdownRemark
  7.   return (
  8.     <div>
  9.       <h1>{post.frontmatter.title}</h1>
  10.       <div dangerouslySetInnerHTML={{ __html: post.html }} />
  11.     </div>
  12.   )
  13. }
  14. export const query = graphql`
  15.   query($slug: String!) {
  16.     markdownRemark(fields: { slug: { eq: $slug } }) {
  17.       html
  18.       frontmatter {
  19.         title
  20.         date
  21.       }
  22.     }
  23.   }
  24. `

Part 4: Git and Netlify Integration

  1. Initialize Git and Push to GitHub:
  2. Bash
  3. git init
  4. git add .
  5. git commit -m “Initial commit”
  6. # Follow instructions to create a new GitHub repo and push

 

  1. Deploy to Netlify:
    • Connect your GitHub repo to Netlify.
    • Set the build command to gatsby build

Part 5: Accessing the CMS and Writing

  1. Access the CMS: Your CMS will be at https://your-site-url.netlify.app/admin/
  2. Authenticate: Log in with your GitHub credentials.
  3. Start Blogging: Click “New Blog Posts” and get writing!

 

JavaScript DOM Methods and Properties

Have you ever wondered how web pages go from static blocks of text to the interactive experiences we use every day? Think about buttons that change things, menus that appear when you hover over them, or forms that magically validate your input. The secret lies in the Document Object Model (DOM) and JavaScript’s ability to manipulate it.

The DOM Made Simple

Imagine your HTML page as a family tree. Each HTML tag is like a member of that family. At the top, you have the <html> element as the grandparent, then elements like <head> and <body> as its children, and so on. The DOM is this tree-like representation that JavaScript can interact with.

Why It Matters

Understanding the DOM is the foundation for adding any kind of dynamic behavior to your web pages. Without it, websites would be pretty boring!

DOM Properties – Your Access Points

Think of DOM properties as the way you describe different elements in that HTML family tree.

  • Key Node Properties
    • nodeType: Tells you if you’re dealing with an element, text, or something else.
    • nodeName: The tag name of an element (like “DIV,” “P,” “IMG”).
    • nodeValue: The actual text content within a text node.
  • Document Properties
    • document.body: Represents the entire <body> section of your page.
    • document.title: Contains the text within the <title> tag.

Example: Changing the Page Title

JavaScript

document.title = “My New Awesome Title!”; 

DOM Methods – Your Power Tools

If properties are for describing elements, methods are the actions you can take on them.

  • The Art of Selection
    • getElementById(‘my-button’): Grabs a single element with the specified ID.
    • getElementsByTagName(‘p’): Returns a collection of all paragraph elements.
    • querySelectorAll(‘.special-image’): The most flexible, uses CSS-like selectors.
  • Transformation
    • createElement(): Lets you build new HTML elements from scratch.
    • appendChild(): Adds a new element as a child of another.
    • removeChild(): Removes an element from the page.
  • Style and Content
    • element.textContent: Gets or sets the plain text inside an element.
    • element.innerHTML: Gets or sets the full HTML content within an element.
    • element.style.color = ‘blue’: Changes CSS styles directly.

It’s Alive! Events and the DOM

The DOM lets you react to user actions:

  • Brief Intro to Events: Clicks, hovers, form submissions—these are all events.
  • Example: A Revealing Button

JavaScript

const button = document.getElementById(‘secret-button’);

button.addEventListener(‘click’, function() {

  const hiddenMessage = document.getElementById(‘secret-message’);

  hiddenMessage.style.display = ‘block’; 

});

Leveling Up

  • There’s Always More: This is a foundational guide – explore resources like MDN Web Docs to dive deeper.
  • Frameworks and Libraries: React, Vue.js, and others streamline DOM manipulation for large projects.

Conclusion

Now that you have a grasp of the DOM, you’re ready to start making your websites interactive. Start small, experiment, and have fun!

React Router Navigation and Redirects

Building dynamic React applications often necessitates controlling how users move between different sections of your website. React Router is a powerful library that simplifies routing, but it also provides tools for programmatic navigation (using the navigate function) and automatic redirects (using <Navigate> and related techniques). In this post, we’ll explore both concepts and see how they work in practice, especially with the latest version of React Router (v6).

“react router navigate”

The navigate function in React Router lets you change the current URL and trigger a navigation within your React app, even from outside of your React components.

Core Usage:

JavaScript

import { useNavigate } from ‘react-router-dom’;

function MyComponent() {

  const navigate = useNavigate();

  const handleButtonClick = () => {

    navigate(‘/profile’); // Navigates to the ‘/profile’ route

  };

  return (

    <button onClick={handleButtonClick}>Go to Profile</button>

  );

}

Common Use Cases:

  • Form Submissions: Redirect to a success page after form submission.
  • Data Fetching: Navigate to a content page after data is loaded.
  • Event Handling: Navigate in response to any button clicks or user interactions.

Options

  • replace: true: Replace the current history entry instead of pushing a new one (useful to prevent the back button from returning to the previous form page).

“react router redirect”

Redirects automatically send users to a different route based on conditions you define.

React Router v5 (Older)

Prior to v6, the <Redirect> component was the standard:

JavaScript

import { Redirect } from ‘react-router-dom’; 

<Route path=”/old-page”>

  <Redirect to=”/new-page” />

</Route>

React Router v6 (Current)

  • <Navigate> Component: Used within JSX for in-component redirects.
  • JavaScript
  • import { Navigate } from ‘react-router-dom’;
  • function HomePage() {
  •   const isLoggedIn = false; 
  •   if (!isLoggedIn) {
  •     return <Navigate to=”/login” replace />; 
  •   }
  •   // … Rest of home page content
  • }
  • useNavigate Hook: For redirects outside of components or more complex logic handling

Conditional Redirects

Route protection based on authentication is a common redirect use case. See the HomePage example above for a basic structure.

How to Save Data with Local Storage in React

Have you ever built a React component to display user preferences or capture to-do list items, only to see everything vanish when the page refreshes? This is where localStorage comes to the rescue! localStorage is a browser-based storage mechanism that lets you save small amounts of data directly in the user’s browser, ensuring it persists even if they close the tab or window.

In this guide, we’ll learn the fundamentals of using localStorage in React and build a practical note-taking app to see it in action.

Understanding localStorage Basics

Click here for an awesome book for learning React

  • setItem() and getItem(): These are the key methods for interacting with localStorage. Let’s see an example:
  • JavaScript
  • localStorage.setItem(‘themePreference’, ‘dark’); 
  • const storedTheme = localStorage.getItem(‘themePreference’); 
  • console.log(storedTheme); // Output: ‘dark’
  • Data Types: Importantly, localStorage only stores strings. For objects or arrays, we’ll use JSON:
  • JavaScript
  • const todos = [{ task: ‘Learn React’}, { task: ‘Use localStorage’}];
  • localStorage.setItem(‘todos’, JSON.stringify(todos)); 
  • const retrievedTodos = JSON.parse(localStorage.getItem(‘todos’)); 
  • Browser Compatibility: localStorage is widely supported across modern browsers.

Building a Note-Taking App

Click Here For My Favorite Online Training For React Skills…

Let’s solidify these concepts by building a simple note-taking app.

  1. Setup:
  2. Assuming you have a basic React project set up (create-react-app is a great way to start), let’s clean up our main App.js file:
  3. JavaScript
  4. import React, { useState, useEffect } from ‘react’;
  5. import ‘./App.css’; 
  6. // … (Rest of the code) 
  1. Adding Notes:
  2. JavaScript
  3. const App = () => {
  4.   const [notes, setNotes] = useState([]); // State to hold our notes
  5.   const [newNote, setNewNote] = useState(”); // State for input
  6.   const handleSubmit = (e) => {
  7.     e.preventDefault();
  8.     setNotes([…notes, { id: Date.now(), text: newNote }]); // Add new note
  9.     setNewNote(”); // Clear input
  10.   };
  11.   // … (Rest of the code) 
  12. };
    • Inside the App component, we use the useState hook to manage an array of notes and input fields.+

Displaying and Deleting Notes

Click Here For My Favorite Online Programming Course To Improve React Skills

  1. JavaScript
  2. // … (Inside the App component)
  3.  return (
  4.    <div className=”App”>
  5.      <h1>Note-Taking App</h1>
  6.      <form onSubmit={handleSubmit}> 
  7.        <input 
  8.          type=”text” 
  9.          value={newNote} 
  10.          onChange={(e) => setNewNote(e.target.value)} 
  11.        />
  12.        <button type=”submit”>Add Note</button> 
  13.      </form>
  14.      {notes.map((note) => (
  15.        <div key={note.id}>
  16.          <p>{note.text}</p> 
  17.          <button onClick={() => deleteNote(note.id)}>Delete</button>
  18.        </div>
  19.      ))}
  20.    </div>
  21.  ); 
  22. // … (Add the deleteNote function)

**4. Saving to localStorage**

“`javascript

useEffect(() => {

  const json = JSON.stringify(notes);

  localStorage.setItem(“notes”, json);

}, [notes]); // Run useEffect whenever ‘notes’ changes

5. Loading from localStorage

JavaScript

 useEffect(() => {

   const json = localStorage.getItem(“notes”);

   const loadedNotes = JSON.parse(json);

   if (loadedNotes) {

     setNotes(loadedNotes);

   }

 }, []); // Empty dependency array: run only on initial render