<?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: adarsh</title>
    <description>The latest articles on Forem by adarsh (@adarsh-gupta).</description>
    <link>https://forem.com/adarsh-gupta</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%2F638742%2F8e8b8909-0488-4b5f-8285-83e5ae8b52ef.jpg</url>
      <title>Forem: adarsh</title>
      <link>https://forem.com/adarsh-gupta</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/adarsh-gupta"/>
    <language>en</language>
    <item>
      <title>7 Interesting GitHub Repositories to Become a Pro React Developer</title>
      <dc:creator>adarsh</dc:creator>
      <pubDate>Sun, 29 Sep 2024 08:39:57 +0000</pubDate>
      <link>https://forem.com/adarsh-gupta/7-interesting-github-repositories-to-become-a-pro-react-developer-3d3j</link>
      <guid>https://forem.com/adarsh-gupta/7-interesting-github-repositories-to-become-a-pro-react-developer-3d3j</guid>
      <description>&lt;p&gt;React is one of the most popular and preferred frontend UI libraries, used in nearly 50 million projects each month.&lt;/p&gt;

&lt;p&gt;It provides all the functionality you need to streamline the process of developing fast, scalable websites and web applications. Pair React with Next.js, and you can build amazing applications capable of handling millions of users. The demand for skilled React developers remains high.&lt;/p&gt;

&lt;p&gt;Because of this, there’s a growing need for programmers who are proficient in this powerful JavaScript library.&lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;




&lt;h3&gt;
  
  
  1. Under the Hood: ReactJS
&lt;/h3&gt;

&lt;p&gt;This repository explains the inner workings of React. One of the best ways to master a library is to dig deeper into its core concepts.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Bogdan-Lyashenko" rel="noopener noreferrer"&gt;
        Bogdan-Lyashenko
      &lt;/a&gt; / &lt;a href="https://github.com/Bogdan-Lyashenko/Under-the-hood-ReactJS" rel="noopener noreferrer"&gt;
        Under-the-hood-ReactJS
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Entire React code base explanation by visual block schemes (Stack version) 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Under the hood: React&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt; This repository contains an explanation of inner work of React. In fact, I was debugging through the entire code base and put all the logic on visual block-schemes, analyzed them, summarized and explained main concepts and approaches. I've already finished with Stack version and now I work with the next, Fiber version.  &lt;/em&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;I wanted to automate process of "learning and documenting" a complex codebase as much as possible, so I started &lt;a href="https://codecrumbs.io/" rel="nofollow noopener noreferrer"&gt;Codecrumbs project&lt;/a&gt;. It will help to build projects like "Under the hood ReactJs" in a shorter time and in a simpler way!&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Each scheme is clickable and can be opened in a new tab, use that to zoom it and be able to read from it. Keep the article and a scheme you are reading about at that moment in separate windows (tabs), that will help to match text and code flow easier.&lt;/p&gt;
&lt;p&gt;We…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Bogdan-Lyashenko/Under-the-hood-ReactJS" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h3&gt;
  
  
  2. Awesome React
&lt;/h3&gt;

&lt;p&gt;A never-ending list of resources, tools, and references related to React and its ecosystem.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/enaqx" rel="noopener noreferrer"&gt;
        enaqx
      &lt;/a&gt; / &lt;a href="https://github.com/enaqx/awesome-react" rel="noopener noreferrer"&gt;
        awesome-react
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A collection of awesome things regarding React ecosystem
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Awesome React &lt;a href="https://github.com/sindresorhus/awesome" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8693bde04030b1670d5097703441005eba34240c32d1df1eb82a5f0d6716518e/68747470733a2f2f63646e2e7261776769742e636f6d2f73696e647265736f726875732f617765736f6d652f643733303566333864323966656437386661383536353265336136336531353464643865383832392f6d656469612f62616467652e737667" alt="Awesome"&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://form.typeform.com/to/xlwIBLD5" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fenaqx%2Fawesome-react.%2Fmedia%2Ffern.png" alt="Sponsor"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Offer API docs that look as good as Stripe's using our sponsor Fern. &lt;a href="https://form.typeform.com/to/xlwIBLD5" rel="nofollow noopener noreferrer"&gt;Request a preview&lt;/a&gt; of your docs on Fern.&lt;/p&gt;

&lt;p&gt;A collection of awesome things regarding the React ecosystem.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/enaqx/awesome-react#react" rel="noopener noreferrer"&gt;React&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-general-resources" rel="noopener noreferrer"&gt;React General Resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-tutorials" rel="noopener noreferrer"&gt;React Tutorials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-frameworks" rel="noopener noreferrer"&gt;React Frameworks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-component-libraries" rel="noopener noreferrer"&gt;React Component Libraries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-state-management-and-data-fetching" rel="noopener noreferrer"&gt;React State Management and Data Fetching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-styling" rel="noopener noreferrer"&gt;React Styling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-routing" rel="noopener noreferrer"&gt;React Routing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-development-tools" rel="noopener noreferrer"&gt;React Development Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-libraries" rel="noopener noreferrer"&gt;React Libraries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-testing" rel="noopener noreferrer"&gt;React Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-awesome-components" rel="noopener noreferrer"&gt;React Awesome Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-components-sandboxes" rel="noopener noreferrer"&gt;React Components Sandboxes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-forms" rel="noopener noreferrer"&gt;React Forms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-tables-and-grids" rel="noopener noreferrer"&gt;React Tables and Grids&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-maps" rel="noopener noreferrer"&gt;React Maps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-charts" rel="noopener noreferrer"&gt;React Charts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-renderers" rel="noopener noreferrer"&gt;React Renderers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-internationalization" rel="noopener noreferrer"&gt;React Internationalization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-graphics-and-animations" rel="noopener noreferrer"&gt;React Graphics and Animations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-integration" rel="noopener noreferrer"&gt;React Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-real-apps" rel="noopener noreferrer"&gt;React Real Apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/enaqx/awesome-react#react-native" rel="noopener noreferrer"&gt;React Native&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-native-general-resources" rel="noopener noreferrer"&gt;React Native General Resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-native-navigation" rel="noopener noreferrer"&gt;React Native Navigation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-native-awesome-components" rel="noopener noreferrer"&gt;React Native Awesome Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-native-libraries" rel="noopener noreferrer"&gt;React Native Libraries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#contribution" rel="noopener noreferrer"&gt;Contribution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;React&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;React General Resources&lt;/h4&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://react.dev/" rel="nofollow noopener noreferrer"&gt;React Official Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/facebook/react" rel="noopener noreferrer"&gt;React GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.reactiflux.com/" rel="nofollow noopener noreferrer"&gt;Reactiflux Discord Channel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://react.dev/community" rel="nofollow noopener noreferrer"&gt;React Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://react.dev/community/conferences" rel="nofollow noopener noreferrer"&gt;React Conferences&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codesandbox.io/s/new" rel="nofollow noopener noreferrer"&gt;React CodeSandbox Playground&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;React Tutorials&lt;/h4&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://react.dev/learn" rel="nofollow noopener noreferrer"&gt;React Official Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/nodejs/reactjs-tutorial" rel="nofollow noopener noreferrer"&gt;Using React in Visual Studio Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sudheerj/reactjs-interview-questions" rel="noopener noreferrer"&gt;React Interview Questions &amp;amp; Answers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.patterns.dev/" rel="nofollow noopener noreferrer"&gt;Design patterns and Component patterns for building powerful Web&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/enaqx/awesome-react" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h3&gt;
  
  
  3. React TypeScript Cheatsheet
&lt;/h3&gt;

&lt;p&gt;A cheatsheet for React developers getting started with TypeScript.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F7t9hkf7lnu6w72chba1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F7t9hkf7lnu6w72chba1l.png" alt="React TypeScript Cheatsheet"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://react-typescript-cheatsheet.netlify.app/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F6764957%2F53868378-2b51fc80-3fb3-11e9-9cee-0277efe8a927.png" height="auto" class="m-0"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://react-typescript-cheatsheet.netlify.app/" rel="noopener noreferrer" class="c-link"&gt;
          React TypeScript Cheatsheets | React TypeScript Cheatsheets
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          React TypeScript Cheatsheets
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Freact-typescript-cheatsheet.netlify.app%2Fimg%2Ficon.png"&gt;
        react-typescript-cheatsheet.netlify.app
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;h3&gt;
  
  
  4. React Patterns
&lt;/h3&gt;

&lt;p&gt;A compilation of React patterns, techniques, tips, and tricks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Frt2d5rj07he6n2pujxwi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Frt2d5rj07he6n2pujxwi.png" alt="React Patterns"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/vasanthk" rel="noopener noreferrer"&gt;
        vasanthk
      &lt;/a&gt; / &lt;a href="https://github.com/vasanthk/react-bits" rel="noopener noreferrer"&gt;
        react-bits
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ✨ React patterns, techniques, tips and tricks ✨
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;&lt;a href="https://vasanthk.gitbooks.io/react-bits" rel="nofollow noopener noreferrer"&gt;React Bits&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A compilation of React Patterns, techniques, tips and tricks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gitbook format&lt;/strong&gt;: &lt;a href="https://vasanthk.gitbooks.io/react-bits" rel="nofollow noopener noreferrer"&gt;https://vasanthk.gitbooks.io/react-bits&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Github repo&lt;/strong&gt;: &lt;a href="https://github.com/vasanthk/react-bits" rel="noopener noreferrer"&gt;https://github.com/vasanthk/react-bits&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Your contributions are heartily ♡ welcome. (✿◠‿◠)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Translations by community:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;中文版 (Chinese): &lt;a href="https://github.com/hateonion/react-bits-CN" rel="noopener noreferrer"&gt;react-bits-cn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;한국어 (Korean): &lt;a href="https://github.com/rayleighko/react-bits-ko" rel="noopener noreferrer"&gt;react-bits-ko&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Design Patterns and Techniques
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/1.conditionals-in-jsx.md" rel="noopener noreferrer"&gt;Conditional in JSX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/2.async-nature-of-setState.md" rel="noopener noreferrer"&gt;Async Nature Of setState()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/3.dependency-injection.md" rel="noopener noreferrer"&gt;Dependency Injection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/4.context-wrapper.md" rel="noopener noreferrer"&gt;Context Wrapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/5.event-handlers.md" rel="noopener noreferrer"&gt;Event Handlers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/6.flux-pattern.md" rel="noopener noreferrer"&gt;Flux Pattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/7.one-way-data-flow.md" rel="noopener noreferrer"&gt;One Way Data Flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/8.presentational-vs-container.md" rel="noopener noreferrer"&gt;Presentational vs Container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/9.third-party-integration.md" rel="noopener noreferrer"&gt;Third Party Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/10.passing-function-to-setState.md" rel="noopener noreferrer"&gt;Passing Function To setState()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/11.decorators.md" rel="noopener noreferrer"&gt;Decorators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/12.feature-flags-using-redux.md" rel="noopener noreferrer"&gt;Feature Flags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/13.component-switch.md" rel="noopener noreferrer"&gt;Component Switch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/14.reaching-into-a-component.md" rel="noopener noreferrer"&gt;Reaching Into A Component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/15.list-components.md" rel="noopener noreferrer"&gt;List Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/16.format-text-via-component.md" rel="noopener noreferrer"&gt;Format Text via Component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/17.react-fragments.md" rel="noopener noreferrer"&gt;React Fragments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/18.share-tracking-logic.md" rel="noopener noreferrer"&gt;Share Tracking Logic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Anti-Patterns
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/README.md" rel="noopener noreferrer"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/01.props-in-initial-state.md" rel="noopener noreferrer"&gt;Props In Initial State&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/02.findDOMNode.md" rel="noopener noreferrer"&gt;findDOMNode()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/03.mixins.md" rel="noopener noreferrer"&gt;Mixins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/04.setState-in-componentWillMount.md" rel="noopener noreferrer"&gt;setState() in componentWillMount()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/05.mutating-state.md" rel="noopener noreferrer"&gt;Mutating State&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/06.using-indexes-as-key.md" rel="noopener noreferrer"&gt;Using Indexes as Key&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/07.spreading-props-dom.md" rel="noopener noreferrer"&gt;Spreading Props on DOM elements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Handling UX Variations
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/README.md" rel="noopener noreferrer"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/01.composing-variations.md" rel="noopener noreferrer"&gt;Composing UX Variations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/02.toggle-ui-elements.md" rel="noopener noreferrer"&gt;Toggle UI Elements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/03.HOC-feature-toggles.md" rel="noopener noreferrer"&gt;HOC for Feature Toggles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/04.HOC-props-proxy.md" rel="noopener noreferrer"&gt;HOC props proxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/05.wrapper-components.md" rel="noopener noreferrer"&gt;Wrapper Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/06.display-order-variations.md" rel="noopener noreferrer"&gt;Display Order Variations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Perf Tips
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./perf-tips/README.md" rel="noopener noreferrer"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./perf-tips/01.shouldComponentUpdate-check.md" rel="noopener noreferrer"&gt;shouldComponentUpdate() check&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./perf-tips/02.pure-component.md" rel="noopener noreferrer"&gt;Using Pure Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./perf-tips/03.reselect.md" rel="noopener noreferrer"&gt;Using reselect&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Styling
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./styling/README.md" rel="noopener noreferrer"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./styling/01.stateless-ui-components.md" rel="noopener noreferrer"&gt;Stateless UI Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./styling/02.styles-module.md" rel="noopener noreferrer"&gt;Styles Module&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vasanthk/react-bits./styling/03.style-functions.md" rel="noopener noreferrer"&gt;Style&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vasanthk/react-bits" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h3&gt;
  
  
  5. React Roadmap
&lt;/h3&gt;

&lt;p&gt;Learn React systematically. This roadmap covers everything you need to know about React and its ecosystem in 2024.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://roadmap.sh/react?source=post_page-----10d6a8647657--------------------------------" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Froadmap.sh%2Fog%2Froadmap%2Freact" height="auto" class="m-0"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://roadmap.sh/react?source=post_page-----10d6a8647657--------------------------------" rel="noopener noreferrer" class="c-link"&gt;
          React Developer Roadmap: Learn to become a React developer
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Community driven, articles, resources, guides, interview questions, quizzes for react development. Learn to become a modern React developer by following the steps, skills, resources and guides listed in this roadmap.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Froadmap.sh%2Fmanifest%2Ficon32.png"&gt;
        roadmap.sh
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;h3&gt;
  
  
  6. A Production-Ready React Application
&lt;/h3&gt;

&lt;p&gt;Dub.sh is one of the best production-grade examples of a React application. It includes Next.js, next-auth, Prisma, and more. It’s also a monorepo.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/dubinc" rel="noopener noreferrer"&gt;
        dubinc
      &lt;/a&gt; / &lt;a href="https://github.com/dubinc/dub" rel="noopener noreferrer"&gt;
        dub
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Open-source link management infrastructure. Loved by modern marketing teams like Vercel, Raycast, and Perplexity.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;a href="https://dub.co" rel="nofollow noopener noreferrer"&gt;
  &lt;img alt="Dub.co is the open-source link management infrastructure for modern marketing teams." src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F28986134%2F314553654-3815d859-afaa-48f9-a9b3-c09964e4d404.jpg%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg5MTgyMDUsIm5iZiI6MTcyODkxNzkwNSwicGF0aCI6Ii8yODk4NjEzNC8zMTQ1NTM2NTQtMzgxNWQ4NTktYWZhYS00OGY5LWE5YjMtYzA5OTY0ZTRkNDA0LmpwZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDE0VDE0NTgyNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTEwMTU2ODA4NzNjZmY2YmFiNzE1Y2ZhZjdiNDQ0NDFiZjRjNzcxNzk3ODA5ZDgxOTUyYjg3Mzc5OTk0MDRkZTAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.RRCk1awtqctNIgpMcJocFytwfIB4UlbqKpelfTWuUT8"&gt;
&lt;/a&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Dub.co&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;
    The open-source Bitly successor
    &lt;br&gt;
    &lt;a href="https://dub.co" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;Learn more »&lt;/strong&gt;&lt;/a&gt;
    &lt;br&gt;
    &lt;br&gt;
    &lt;a href="https://github.com/dubinc/dub#introduction" rel="noopener noreferrer"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/a&gt; ·
    &lt;a href="https://github.com/dubinc/dub#features" rel="noopener noreferrer"&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/a&gt; ·
    &lt;a href="https://github.com/dubinc/dub#tech-stack" rel="noopener noreferrer"&gt;&lt;strong&gt;Tech Stack&lt;/strong&gt;&lt;/a&gt; ·
    &lt;a href="https://github.com/dubinc/dub#self-hosting" rel="noopener noreferrer"&gt;&lt;strong&gt;Self-hosting&lt;/strong&gt;&lt;/a&gt; ·
    &lt;a href="https://github.com/dubinc/dub#contributing" rel="noopener noreferrer"&gt;&lt;strong&gt;Contributing&lt;/strong&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://twitter.com/dubdotco" rel="nofollow noopener noreferrer"&gt;
    &lt;img src="https://camo.githubusercontent.com/b938300a89fc0bfaf718a4616e53c2ed562adf42c9fb4149fe2bb569aa40a658/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f666f6c6c6f772f647562646f74636f3f7374796c653d666c6174266c6162656c3d253430647562646f74636f266c6f676f3d7477697474657226636f6c6f723d306266266c6f676f436f6c6f723d666666" alt="Twitter"&gt;
  &lt;/a&gt;
  &lt;a href="https://news.ycombinator.com/item?id=32939407" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a49356377e0903ddb19e124e2c3746cac32516b9630abf14c2616b072b3aaccf/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b65722532304e6577732d3235352d253233464636363030" alt="Hacker News"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/dubinc/dub/blob/main/LICENSE" rel="noopener noreferrer"&gt;
    &lt;img src="https://camo.githubusercontent.com/f566ff9dbf2e519927fed2c056621cc0e76654db0851876f9eae58acbe271074/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f647562696e632f6475623f6c6162656c3d6c6963656e7365266c6f676f3d67697468756226636f6c6f723d663830266c6f676f436f6c6f723d666666" alt="License"&gt;
  &lt;/a&gt;
&lt;/p&gt;



&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Introduction&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Dub.co is the open-source link management infrastructure for modern marketing teams.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dub.co/help/article/dub-analytics" rel="nofollow noopener noreferrer"&gt;Advanced Analytics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dub.co/features/branded-links" rel="nofollow noopener noreferrer"&gt;Branded Links&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dub.co/features/qr-codes" rel="nofollow noopener noreferrer"&gt;QR Codes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dub.co/features/personalization" rel="nofollow noopener noreferrer"&gt;Personalization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dub.co/features/collaboration" rel="nofollow noopener noreferrer"&gt;Team Collaboration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Tech Stack&lt;/h2&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nextjs.org/" rel="nofollow noopener noreferrer"&gt;Next.js&lt;/a&gt; – framework&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.typescriptlang.org/" rel="nofollow noopener noreferrer"&gt;TypeScript&lt;/a&gt; – language&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://tailwindcss.com/" rel="nofollow noopener noreferrer"&gt;Tailwind&lt;/a&gt; – CSS&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://upstash.com/" rel="nofollow noopener noreferrer"&gt;Upstash&lt;/a&gt; – redis&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://tinybird.com/" rel="nofollow noopener noreferrer"&gt;Tinybird&lt;/a&gt; – analytics&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://planetscale.com/" rel="nofollow noopener noreferrer"&gt;PlanetScale&lt;/a&gt; – database&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://next-auth.js.org/" rel="nofollow noopener noreferrer"&gt;NextAuth.js&lt;/a&gt; – auth&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://boxyhq.com/enterprise-sso" rel="nofollow noopener noreferrer"&gt;BoxyHQ&lt;/a&gt; – SSO/SAML&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://turbo.build/repo" rel="nofollow noopener noreferrer"&gt;Turborepo&lt;/a&gt; – monorepo&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://stripe.com/" rel="nofollow noopener noreferrer"&gt;Stripe&lt;/a&gt; – payments&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://resend.com/" rel="nofollow noopener noreferrer"&gt;Resend&lt;/a&gt; – emails&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://vercel.com/" rel="nofollow noopener noreferrer"&gt;Vercel&lt;/a&gt; – deployments&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://pangea.cloud/services/domain-intel/reputation" rel="nofollow noopener noreferrer"&gt;Pangea&lt;/a&gt; - link scanning&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Self-Hosting&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;You can self-host Dub.co for greater control over your data and design. &lt;a href="https://dub.co/docs/self-hosting/guide" rel="nofollow noopener noreferrer"&gt;Read this guide&lt;/a&gt; to learn more.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contributing&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;We love our contributors! Here's how you can contribute:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/dubinc/dub/issues" rel="noopener noreferrer"&gt;Open an issue&lt;/a&gt; if you believe you've encountered a bug.&lt;/li&gt;
&lt;li&gt;Follow the &lt;a href="https://dub.co/docs/local-development" rel="nofollow noopener noreferrer"&gt;local development guide&lt;/a&gt; to get your local dev environment set up.&lt;/li&gt;
&lt;li&gt;Make a &lt;a href="https://github.com/dubinc/dub/pull" rel="noopener noreferrer"&gt;pull request&lt;/a&gt; to add new features/make quality-of-life improvements/fix bugs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/dubinc/dub/graphs/contributors" rel="noopener noreferrer"&gt;&lt;br&gt;
  &lt;img src="https://camo.githubusercontent.com/a9ee7f3e09008807de23102d2371f74c2f237fae55608dc41ffeddfb576d82e0/68747470733a2f2f636f6e747269622e726f636b732f696d6167653f7265706f3d647562696e632f647562"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Repo Activity&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/6711fa243675a934c9147ce584e05bcc32fa978aea62e58d16639f697d0850a6/68747470733a2f2f7265706f62656174732e6178696f6d2e636f2f6170692f656d6265642f366163346339346138396561323065326531303033326239333261313238623664383434326536362e737667"&gt;&lt;img src="https://camo.githubusercontent.com/6711fa243675a934c9147ce584e05bcc32fa978aea62e58d16639f697d0850a6/68747470733a2f2f7265706f62656174732e6178696f6d2e636f2f6170692f656d6265642f366163346339346138396561323065326531303033326239333261313238623664383434326536362e737667" alt="Dub.co repo activity – generated by Axiom" title="Repobeats analytics image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;License&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Inspired by…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/dubinc/dub" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;





&lt;h3&gt;
  
  
  7. Production-Ready React Hooks
&lt;/h3&gt;

&lt;p&gt;A comprehensive collection of production-ready React hooks, including &lt;code&gt;useScroll&lt;/code&gt;, &lt;code&gt;useBattery&lt;/code&gt;, &lt;code&gt;useQueue&lt;/code&gt;, and more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fxcltju1www3gfevgmd9a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fxcltju1www3gfevgmd9a.png" alt="Production-Ready React Hooks"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/streamich" rel="noopener noreferrer"&gt;
        streamich
      &lt;/a&gt; / &lt;a href="https://github.com/streamich/react-use" rel="noopener noreferrer"&gt;
        react-use
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      React Hooks — 👍
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
  &lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;
    &lt;br&gt;
    &lt;br&gt;
    👍
    &lt;br&gt;
    react-use
    &lt;br&gt;
    &lt;br&gt;
    &lt;br&gt;
    &lt;br&gt;
  &lt;/h1&gt;
&lt;/div&gt;
  &lt;sup&gt;
    &lt;br&gt;
    &lt;br&gt;
    &lt;a href="https://www.npmjs.com/package/react-use" rel="nofollow noopener noreferrer"&gt;
       &lt;img src="https://camo.githubusercontent.com/904ed6d8fb2199061c86e61e2b3f4fdfc2746afb6abaaeba1dc004e92e732ec0/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f72656163742d7573652e737667" alt="npm package"&gt;
    &lt;/a&gt;
    &lt;a href="https://circleci.com/gh/streamich/react-use" rel="nofollow noopener noreferrer"&gt;
      &lt;img src="https://camo.githubusercontent.com/4b8300482e16582eb8999383152f7acb03d0a7825a18bd9a32f79216e8fe8ef1/68747470733a2f2f696d672e736869656c64732e696f2f636972636c6563692f70726f6a6563742f6769746875622f73747265616d6963682f72656163742d7573652f6d61737465722e737667" alt="CircleCI master"&gt;
    &lt;/a&gt;
    &lt;a href="https://www.npmjs.com/package/react-use" rel="nofollow noopener noreferrer"&gt;
      &lt;img src="https://camo.githubusercontent.com/4e78f74b9d0f0030e32a810c9b0a871183778171b625680be0e354f5218d98df/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f646d2f72656163742d7573652e737667" alt="npm downloads"&gt;
    &lt;/a&gt;
    &lt;a href="http://streamich.github.io/react-use" rel="nofollow noopener noreferrer"&gt;
      &lt;img src="https://camo.githubusercontent.com/d51555b4673c7c57aeb713abbe9175972b4bfca3a65ca48ce0e2a4c6a496d47f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64656d6f732df09f9a802d79656c6c6f772e737667" alt="demos"&gt;
    &lt;/a&gt;
    &lt;br&gt;
    Collection of essential &lt;a href="https://reactjs.org/docs/hooks-intro.html" rel="nofollow noopener noreferrer"&gt;React Hooks&lt;/a&gt;
    &lt;em&gt;Port of&lt;/em&gt; &lt;a href="https://github.com/streamich/libreact" rel="noopener noreferrer"&gt;&lt;code&gt;libreact&lt;/code&gt;&lt;/a&gt;
    &lt;br&gt;
    Translations: &lt;a href="https://github.com/zenghongtu/react-use-chinese/blob/master/README.md" rel="noopener noreferrer"&gt;🇨🇳 汉语&lt;/a&gt;
  &lt;/sup&gt;
  &lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  &lt;pre&gt;npm i &lt;a href="https://www.npmjs.com/package/react-use" rel="nofollow noopener noreferrer"&gt;react-use&lt;/a&gt;&lt;/pre&gt;
  &lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/Sensors.md" rel="noopener noreferrer"&gt;&lt;strong&gt;Sensors&lt;/strong&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useBattery.md" rel="noopener noreferrer"&gt;&lt;code&gt;useBattery&lt;/code&gt;&lt;/a&gt; — tracks device battery state. &lt;a href="https://codesandbox.io/s/qlvn662zww" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e0e88b0bce08e4baa45ac7c239045406852e113fb2bd60a6c5f582885a760a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64656d6f2d2532302532302532302546302539462539412538302d677265656e2e737667" alt=""&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useGeolocation.md" rel="noopener noreferrer"&gt;&lt;code&gt;useGeolocation&lt;/code&gt;&lt;/a&gt; — tracks geo location state of user's device. &lt;a href="https://streamich.github.io/react-use/?path=/story/sensors-usegeolocation--demo" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e0e88b0bce08e4baa45ac7c239045406852e113fb2bd60a6c5f582885a760a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64656d6f2d2532302532302532302546302539462539412538302d677265656e2e737667" alt=""&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useHover.md" rel="noopener noreferrer"&gt;&lt;code&gt;useHover&lt;/code&gt; and &lt;code&gt;useHoverDirty&lt;/code&gt;&lt;/a&gt; — tracks mouse hover state of some element. &lt;a href="https://codesandbox.io/s/zpn583rvx" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e0e88b0bce08e4baa45ac7c239045406852e113fb2bd60a6c5f582885a760a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64656d6f2d2532302532302532302546302539462539412538302d677265656e2e737667" alt=""&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useHash.md" rel="noopener noreferrer"&gt;&lt;code&gt;useHash&lt;/code&gt;&lt;/a&gt; — tracks location hash value. &lt;a href="https://streamich.github.io/react-use/?path=/story/sensors-usehash--demo" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e0e88b0bce08e4baa45ac7c239045406852e113fb2bd60a6c5f582885a760a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64656d6f2d2532302532302532302546302539462539412538302d677265656e2e737667" alt=""&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useIdle.md" rel="noopener noreferrer"&gt;&lt;code&gt;useIdle&lt;/code&gt;&lt;/a&gt; — tracks whether user is being inactive.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useIntersection.md" rel="noopener noreferrer"&gt;&lt;code&gt;useIntersection&lt;/code&gt;&lt;/a&gt; — tracks an HTML element's intersection. &lt;a href="https://streamich.github.io/react-use/?path=/story/sensors-useintersection--demo" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e0e88b0bce08e4baa45ac7c239045406852e113fb2bd60a6c5f582885a760a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64656d6f2d2532302532302532302546302539462539412538302d677265656e2e737667" alt=""&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useKey.md" rel="noopener noreferrer"&gt;&lt;code&gt;useKey&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://github.com/streamich/react-use./docs/useKeyPress.md" rel="noopener noreferrer"&gt;&lt;code&gt;useKeyPress&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://github.com/streamich/react-use./docs/useKeyboardJs.md" rel="noopener noreferrer"&gt;&lt;code&gt;useKeyboardJs&lt;/code&gt;&lt;/a&gt;, and &lt;a href="https://github.com/streamich/react-use./docs/useKeyPressEvent.md" rel="noopener noreferrer"&gt;&lt;code&gt;useKeyPressEvent&lt;/code&gt;&lt;/a&gt; — track keys. &lt;a href="https://streamich.github.io/react-use/?path=/story/sensors-usekeypressevent--demo" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e0e88b0bce08e4baa45ac7c239045406852e113fb2bd60a6c5f582885a760a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64656d6f2d2532302532302532302546302539462539412538302d677265656e2e737667" alt=""&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useLocation.md" rel="noopener noreferrer"&gt;&lt;code&gt;useLocation&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://github.com/streamich/react-use./docs/useSearchParam.md" rel="noopener noreferrer"&gt;&lt;code&gt;useSearchParam&lt;/code&gt;&lt;/a&gt; — tracks page navigation bar location state.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useLongPress.md" rel="noopener noreferrer"&gt;&lt;code&gt;useLongPress&lt;/code&gt;&lt;/a&gt; — tracks long press gesture of some element.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useMedia.md" rel="noopener noreferrer"&gt;&lt;code&gt;useMedia&lt;/code&gt;&lt;/a&gt; — tracks state of a CSS media query. &lt;a href="https://streamich.github.io/react-use/?path=/story/sensors-usemedia--demo" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e0e88b0bce08e4baa45ac7c239045406852e113fb2bd60a6c5f582885a760a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64656d6f2d2532302532302532302546302539462539412538302d677265656e2e737667" alt=""&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useMediaDevices.md" rel="noopener noreferrer"&gt;&lt;code&gt;useMediaDevices&lt;/code&gt;&lt;/a&gt; — tracks state of connected hardware devices.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useMotion.md" rel="noopener noreferrer"&gt;&lt;code&gt;useMotion&lt;/code&gt;&lt;/a&gt; — tracks state of device's motion sensor.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useMouse.md" rel="noopener noreferrer"&gt;&lt;code&gt;useMouse&lt;/code&gt; and &lt;code&gt;useMouseHovered&lt;/code&gt;&lt;/a&gt; — tracks state of mouse position. &lt;a href="https://streamich.github.io/react-use/?path=/story/sensors-usemouse--docs" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e0e88b0bce08e4baa45ac7c239045406852e113fb2bd60a6c5f582885a760a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64656d6f2d2532302532302532302546302539462539412538302d677265656e2e737667" alt=""&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useMouseWheel.md" rel="noopener noreferrer"&gt;&lt;code&gt;useMouseWheel&lt;/code&gt;&lt;/a&gt; — tracks deltaY of scrolled mouse wheel. &lt;a href="https://streamich.github.io/react-use/?path=/story/sensors-usemousewheel--docs" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e0e88b0bce08e4baa45ac7c239045406852e113fb2bd60a6c5f582885a760a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64656d6f2d2532302532302532302546302539462539412538302d677265656e2e737667" alt=""&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useNetworkState.md" rel="noopener noreferrer"&gt;&lt;code&gt;useNetworkState&lt;/code&gt;&lt;/a&gt; — tracks the state of browser's network connection. &lt;a href="https://streamich.github.io/react-use/?path=/story/sensors-usenetworkstate--demo" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e0e88b0bce08e4baa45ac7c239045406852e113fb2bd60a6c5f582885a760a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64656d6f2d2532302532302532302546302539462539412538302d677265656e2e737667" alt=""&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/streamich/react-use./docs/useOrientation.md" rel="noopener noreferrer"&gt;&lt;code&gt;useOrientation&lt;/code&gt;&lt;/a&gt; — tracks…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/streamich/react-use" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h3&gt;
  
  
  Wrapping It Up!
&lt;/h3&gt;

&lt;p&gt;Congratulations on making it this far! You’re a fantastic reader!&lt;/p&gt;

&lt;p&gt;These are just a few great repositories available for React. There are many more to explore, so feel free to dive deeper into the React ecosystem and find even more amazing resources!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>react</category>
    </item>
    <item>
      <title>7 Github Repositories to Become a Pro Frontend Developer</title>
      <dc:creator>adarsh</dc:creator>
      <pubDate>Fri, 27 Sep 2024 16:58:07 +0000</pubDate>
      <link>https://forem.com/adarsh-gupta/7-github-repositories-to-become-a-pro-frontend-developer-56po</link>
      <guid>https://forem.com/adarsh-gupta/7-github-repositories-to-become-a-pro-frontend-developer-56po</guid>
      <description>&lt;p&gt;The front end is a crucial part of any application, and having a firm hand on the front end is necessary to be in the top 1% of the world. Your front end decides whether the customer or user is ready for business with you, so it is as important as it is to build a good-looking UI.&lt;/p&gt;

&lt;p&gt;Here are some of the top repositories available that can improve your front-end skills ten times over what they are right now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Awesome Frontend&lt;/strong&gt;&lt;br&gt;
This awesome repository consists of a curated list of awesome front-end development resources.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/trendmicro-frontend/awesome?source=post_page-----fa321549370d--------------------------------" rel="noopener noreferrer"&gt;Awesome frontend&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Developer Roadmap&lt;/strong&gt;&lt;br&gt;
This repository has a detailed roadmap that you can follow. This repo is very popular among developer communities&lt;br&gt;
&lt;a href="//roadmap.sh"&gt;RoadMap&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F161n8w6vwx1v5ihpc0eu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F161n8w6vwx1v5ihpc0eu.png" alt="Image description" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Awesome CSS&lt;/strong&gt;&lt;br&gt;
This repository is a curated list of frameworks, style guides, and cool nuggets of information for writing awesome CSS. It does not contain resources to learn CSS.&lt;/p&gt;

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

&lt;p&gt;If you want to learn about CSS Flexbox in-depth, check this ebook for free:&lt;br&gt;
&lt;a href="https://gumroad.com/a/381209427/GHwFS?source=post_page-----fa321549370d--------------------------------" rel="noopener noreferrer"&gt;Ebook for you&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. CSS Protips&lt;/strong&gt;&lt;br&gt;
A collection of pointers to help you advance your CSS skills. One of the best-recommended repositories for beginners to dive into CSS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhm301upvy726ifhv0d3y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhm301upvy726ifhv0d3y.png" alt="Image description" width="260" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/AllThingsSmitty/css-protips" rel="noopener noreferrer"&gt;Protips&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Frontend Development&lt;/strong&gt;&lt;br&gt;
A manually curated collection of resources for front-end web developers. An advanced repository for collections of useful pieces of knowledge and tools.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/dypsilon/frontend-dev-bookmarks" rel="noopener noreferrer"&gt;frontend-dev-bookmarks&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Front-End Checklist&lt;/strong&gt;&lt;br&gt;
The Front-End Checklist is an exhaustive list of all elements you need to have / to test before launching your website / HTML page to production.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/thedaviddias/Front-End-Checklist" rel="noopener noreferrer"&gt;Front-End-Checklist&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Awesome Web Components&lt;/strong&gt;&lt;br&gt;
A curated list of awesome Web Components tools, articles, and resources.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/obetomuniz/awesome-webcomponents" rel="noopener noreferrer"&gt;Awesome Web Components&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
These are some of the many tricks that you can use to get accurate results. If you know more, let me know in the comments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://buymeacoffee.com/adarshgupta" rel="noopener noreferrer"&gt;If you wish, you can support me by buying me a Chai.&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>6 Cool Things You Can Do With Regular HTML</title>
      <dc:creator>adarsh</dc:creator>
      <pubDate>Tue, 24 Sep 2024 10:07:29 +0000</pubDate>
      <link>https://forem.com/adarsh-gupta/6-cool-things-you-can-do-with-regular-html-1al0</link>
      <guid>https://forem.com/adarsh-gupta/6-cool-things-you-can-do-with-regular-html-1al0</guid>
      <description>&lt;p&gt;&lt;a href="https://media.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%2For53aqy7okyyrnvkwvzg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2For53aqy7okyyrnvkwvzg.png" alt="ImageJS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's no wonder that HTML can do some stuff that we might even think that it is an external library. If efficiently used we can even hack NASA (I'm just kidding). So let's look into some cool features of HyperText Markup Language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Color Picker&lt;/strong&gt;&lt;br&gt;
Create a color picker by simply using the  tag and giving it a property of type=’color’.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fry3tyva7bn5hddp7blpz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fry3tyva7bn5hddp7blpz.png" alt="Images"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fvpywcb5hmh9um3k09cqm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fvpywcb5hmh9um3k09cqm.png" alt="Image des"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Accordion&lt;/strong&gt;&lt;br&gt;
The  tag defines a visible heading for the  element.&lt;/p&gt;

&lt;p&gt;The heading can be clicked to view/hide the details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fu730cqvyl31y04bkfgzi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fu730cqvyl31y04bkfgzi.png" alt="Image oo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fsotgy2ty5oix9k7xf2t9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fsotgy2ty5oix9k7xf2t9.png" alt="Image ahh"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can create simple accordions using this method, without the need to implement CSS classes and JavaScript click handlers that toggle visibility whenever clicked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Make a call&lt;/strong&gt;&lt;br&gt;
Call someone direct from your website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fwk34wickwufjud07vln9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fwk34wickwufjud07vln9.png" alt="Image calling"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Progress bar&lt;/strong&gt;&lt;br&gt;
You can use the  element which will represent the completion of something.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fax4kmnzcwkcok47ofb4s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fax4kmnzcwkcok47ofb4s.png" alt="Image progress"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Farfeuasazzftdkhp8phv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Farfeuasazzftdkhp8phv.png" alt="Image progress2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Autocomplete&lt;/strong&gt;&lt;br&gt;
The  tag is used to provide an “autocomplete” feature for the  elements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fjxddzw798ffui055q2t5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fjxddzw798ffui055q2t5.png" alt="Image autocomplete"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fbadhk5x8i01arp490x3q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fbadhk5x8i01arp490x3q.png" alt="Image a1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fca5fyiucujzinf8i3oyk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fca5fyiucujzinf8i3oyk.png" alt="Image a3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Emoji&lt;/strong&gt;&lt;br&gt;
Many UTF-8 characters cannot be typed on a keyboard. Some keyboards and devices also do not have an emoji input. However, emojis can always be displayed using numbers (known as ‘entity numbers’).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fobf927xjy90u2yowykt9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fobf927xjy90u2yowykt9.png" alt="Image emoji"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Ftvaqejh6rc2p5i9j19o1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Ftvaqejh6rc2p5i9j19o1.png" alt="Image emojiw"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Here we discussed a few HTML-only things that might save you time, and avoid the need to complicate things by incorporating CSS and JavaScript.&lt;/p&gt;

&lt;p&gt;I hope you have found this useful. Were any of these tips new to you? If so, be sure to let us know in the comments.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>html</category>
      <category>webdev</category>
      <category>css</category>
    </item>
    <item>
      <title>10 Websites every Web developer should at least look</title>
      <dc:creator>adarsh</dc:creator>
      <pubDate>Tue, 17 Sep 2024 07:54:51 +0000</pubDate>
      <link>https://forem.com/adarsh-gupta/10-websites-every-web-developer-should-at-least-look-5fi2</link>
      <guid>https://forem.com/adarsh-gupta/10-websites-every-web-developer-should-at-least-look-5fi2</guid>
      <description>&lt;p&gt;&lt;a href="https://media.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%2F68d454huh374xkq04je6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F68d454huh374xkq04je6.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are a web developer, you might be obsessed with finding a website that can save you tons of time.&lt;/p&gt;

&lt;p&gt;Here are websites that I personally use to save at least 25 hour/week.&lt;/p&gt;

&lt;p&gt;Quick tip: If you wanna build your application fast, try this: &lt;a href="https://shipfa.st/?via=adarsh" rel="noopener noreferrer"&gt;SaaS boilerplate for beginners&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  UI verse
&lt;/h2&gt;

&lt;p&gt;UI verse is massive library with 100s of design elements that you can just copy paste into your website. It is one of the largest Open source UI library.&lt;/p&gt;

&lt;p&gt;Link &lt;a href="https://uiverse.io/checkboxes" rel="noopener noreferrer"&gt;https://uiverse.io/checkboxes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fwdw39xxt0b0e2zviskd5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fwdw39xxt0b0e2zviskd5.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Glitch
&lt;/h2&gt;

&lt;p&gt;Glitch helps to create your next web project in browser with no setup and instant deployment.&lt;/p&gt;

&lt;p&gt;Link: glitch.com&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F6qsjfaut0j1k094fco4f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F6qsjfaut0j1k094fco4f.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Shots.so
&lt;/h2&gt;

&lt;p&gt;Create beautifully designed image backgrounds for your images. With over 100’s of prebuilt as well as customizable templates, you can make your images 10X better&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="http://www.shots.so" rel="noopener noreferrer"&gt;www.shots.so&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fzdkrxen9ty7htrie1d3w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fzdkrxen9ty7htrie1d3w.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Dev Docs
&lt;/h2&gt;

&lt;p&gt;What if you have a documentation which have documented almost everything you need? DevDocs combines multiple API documentations in a fast, organized, and searchable interface.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://devdocs.io/" rel="noopener noreferrer"&gt;https://devdocs.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fhuehyz7uxtuwz0v0gtxm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fhuehyz7uxtuwz0v0gtxm.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  LambdaTest Free Online Tools
&lt;/h2&gt;

&lt;p&gt;A collection of free online tools, utilities, and libraries that will help developers, testers, designers, in their day to day tasks&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://www.lambdatest.com/free-online-tools" rel="noopener noreferrer"&gt;https://www.lambdatest.com/free-online-tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fotn9r9ottxdqb2zbsl0w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fotn9r9ottxdqb2zbsl0w.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mobbin
&lt;/h2&gt;

&lt;p&gt;The world’s largest mobile and web design library. Save hours of UI &amp;amp; UX research with our library of 300,000+ screens from the world’s best designed apps.&lt;/p&gt;

&lt;p&gt;Link: Mobbin.com&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F6w30tcpgsmk1smoyg3p0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F6w30tcpgsmk1smoyg3p0.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ping Test
&lt;/h2&gt;

&lt;p&gt;You can ping any IP address or hostname from 10 locations in parallel.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://tools.keycdn.com/ping" rel="noopener noreferrer"&gt;https://tools.keycdn.com/ping&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fy13w2xkl1iquyu7w32yc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fy13w2xkl1iquyu7w32yc.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  LandingFolio
&lt;/h2&gt;

&lt;p&gt;Most developers are not designers and this website is the best choice for developers to get inspiration&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://www.landingfolio.com/" rel="noopener noreferrer"&gt;https://www.landingfolio.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fdynzyblxe9g8ef7cp8tk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fdynzyblxe9g8ef7cp8tk.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Free for Dev
&lt;/h2&gt;

&lt;p&gt;A compilation of free software and services, covering everything from SaaS to developer tools, APIs, and cloud platforms.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://free-for.dev/#/" rel="noopener noreferrer"&gt;https://free-for.dev/#/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F8b9ctlx3p1hz6ilg0tvl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F8b9ctlx3p1hz6ilg0tvl.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tiny Wow
&lt;/h2&gt;

&lt;p&gt;We always look for a free alternative and this website is a goldmine. Discover a wide range of free tools and services.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://tinywow.com/" rel="noopener noreferrer"&gt;https://tinywow.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fgr9fnm56pp1bpkpj1wtl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fgr9fnm56pp1bpkpj1wtl.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks for checking out this blog. We discussed a lot of tools in the blog. Follow me here so that you wont miss any future updates.&lt;/p&gt;

&lt;p&gt;Keep building&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>The Only Next.js Guide you need</title>
      <dc:creator>adarsh</dc:creator>
      <pubDate>Mon, 16 Sep 2024 04:54:09 +0000</pubDate>
      <link>https://forem.com/adarsh-gupta/best-complete-nextjs-tutorial-for-begineers-4p3e</link>
      <guid>https://forem.com/adarsh-gupta/best-complete-nextjs-tutorial-for-begineers-4p3e</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foh97aylq194sghaskbas.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foh97aylq194sghaskbas.png" alt="Logos" width="560" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next.js has quickly become one of the most popular frameworks on the web, powering many of the sites you visit daily.&lt;/p&gt;

&lt;p&gt;Here is the full un-cut version of the blog:&lt;/p&gt;

&lt;p&gt;This guide is going to be a no-nonsense, straight-to-the-point introduction to Next.js. It’s one of the easiest frameworks to get started with, but mastering it is a whole different story.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Origins of Next.js
&lt;/h1&gt;

&lt;p&gt;Before diving into Next.js, let’s take a step back. React was created by a team of developers at Facebook. Another group of developers recognized that React lacked certain essential features that developers often needed. To bridge this gap, they built Next.js on top of React, adding these crucial features and enhancing the overall development experience.&lt;/p&gt;

&lt;p&gt;You can checkout the full video version from here&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/NSfuIDwMyR0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;Let’s start from scratch.&lt;/p&gt;

&lt;p&gt;First things first: you’ll need to install Next.js. Assuming you already have Node.js installed on your computer, here’s how you do it.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx create-next-app@latest&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Understanding the Project Structure
&lt;/h1&gt;

&lt;p&gt;When you first open your Next.js project, you’ll see many files and folders. Don’t be overwhelmed. Focus primarily on the src and app folders, which are the core parts of your application.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Routing in Next.js:&lt;/strong&gt;  Next.js uses a file-system based router. The structure of your folders inside the app directory defines your app’s routes. For example, a folder named about inside the app directory will correspond to the /about route.&lt;/p&gt;

&lt;h1&gt;
  
  
  Key File Conventions in Next.js
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Layout and Page Files
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;layout.jsx&lt;/code&gt;: Shared among multiple routes, the  &lt;code&gt;layout.jsx&lt;/code&gt;  file defines the layout for pages within a specific folder. The root layout can include  &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;  and  &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;  tags, but inner layouts should use  &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;  or  &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt;  tags.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;page.jsx&lt;/code&gt;: Defines the unique UI for each route and makes routes publicly accessible.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Special Files
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;loading.js&lt;/code&gt;: Used to create a loading UI with React Suspense.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;not-found.js&lt;/code&gt;: Customizes the 404 page&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;route.js&lt;/code&gt;: Handles API requests for a route.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h1&gt;
  
  
  Advanced Routing Features
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Route Groups
&lt;/h2&gt;

&lt;p&gt;Deeply nested routing structures can become messy. To keep things organized, use route groups. By placing folder names inside parentheses, you can omit those folders from the URL.&lt;/p&gt;

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

&lt;p&gt;For example, the structure  &lt;code&gt;app/(accounts)/(dashboard)/billing/page.js&lt;/code&gt;  will correspond to a cleaner URL like  &lt;code&gt;/billing&lt;/code&gt;.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Dynamic and Parallel Routes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Dynamic Routes&lt;/strong&gt;: Use square brackets to create routes that handle multiple parameters, such as product or blog pages.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Parallel Routes&lt;/strong&gt;: Allows conditional rendering of multiple pages within the same layout, useful for different user roles like  &lt;code&gt;/admin&lt;/code&gt;  and  &lt;code&gt;/user&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Intercepting Routes
&lt;/h2&gt;

&lt;p&gt;Intercepting routes let you modify default routing behavior, such as displaying a login modal instead of a full page while keeping the URL consistent.&lt;/p&gt;

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

&lt;p&gt;Here is how it looks in your file system&lt;/p&gt;

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

&lt;p&gt;Also there is a specific way to match these folders:&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Middleware and Data Fetching
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Middleware
&lt;/h2&gt;

&lt;p&gt;Middleware is useful for tasks like authentication and authorization. To set up middleware in Next.js, create a  &lt;code&gt;middleware.ts&lt;/code&gt;  file in the root of your project.&lt;/p&gt;

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

&lt;p&gt;This can protect API routes or specific pages based on user identity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Fetching
&lt;/h2&gt;

&lt;p&gt;Next.js provides several options for data fetching:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fetch API&lt;/strong&gt;: For making HTTP requests.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Database Clients&lt;/strong&gt;: Directly interact with databases.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Client-side Data Fetching Libraries&lt;/strong&gt;: Tools like React Query.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Route Handlers&lt;/strong&gt;: For custom data fetching logic.&lt;/p&gt;

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

&lt;p&gt;Next.js also introduces  &lt;strong&gt;Server Actions&lt;/strong&gt;, asynchronous functions executed on the server to handle form submissions and data mutation&lt;/p&gt;

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

&lt;p&gt;Example of server action:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Server Components vs. Client Components
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Server Components
&lt;/h3&gt;

&lt;p&gt;Server Components are rendered and cached on the server, handling data fetching and other server-side logic before sending HTML to the client. They are ideal for tasks that don’t require client-side interactivity.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Client Components
&lt;/h3&gt;

&lt;p&gt;Client Components run in the browser and are used for interactive features like onClick events. To designate a component as a Client Component, add the “use client” directive at the top of your file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rendering Methods in Next.js
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Server-Side Rendering (SSR)
&lt;/h3&gt;

&lt;p&gt;Server-Side Rendering generates HTML on the server for each request.&lt;/p&gt;

&lt;p&gt;This method is useful for dynamic content that changes based on user data or other factors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Static Site Generation (SSG)
&lt;/h3&gt;

&lt;p&gt;Static Site Generation pre-renders HTML during the build process, which is then served to the client. This method is ideal for content that doesn’t change often.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dynamic Rendering
&lt;/h3&gt;

&lt;p&gt;Dynamic Rendering generates HTML at request time for each user, suitable for personalized content.&lt;/p&gt;

&lt;h1&gt;
  
  
  Styling and Optimization
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Tailwind CSS
&lt;/h2&gt;

&lt;p&gt;When it comes to styling your Next.js app, Tailwind CSS is the go-to choice. It’s popular, flexible, and easy to integrate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Image and Script Optimization
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;&amp;lt;Image&amp;gt;&lt;/code&gt; &lt;strong&gt;Component&lt;/strong&gt;: Automatically optimizes images for performance.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;&amp;lt;Script&amp;gt;&lt;/code&gt; &lt;strong&gt;Tag&lt;/strong&gt;: Allows loading of third-party scripts efficiently.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Deployment
&lt;/h1&gt;

&lt;p&gt;The simplest way to deploy your Next.js app is via  &lt;strong&gt;Vercel&lt;/strong&gt;, which offers seamless integration. For more control, consider deploying to an AWS EC2 instance.&lt;/p&gt;

&lt;p&gt;Thanks for checking this out. Here is the complete video with full details so that you dont want to miss any details&lt;/p&gt;

&lt;p&gt;You can checkout the full video version from here&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/NSfuIDwMyR0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>10 Things Every JavaScript Developer Should Know</title>
      <dc:creator>adarsh</dc:creator>
      <pubDate>Fri, 13 Sep 2024 14:54:33 +0000</pubDate>
      <link>https://forem.com/adarsh-gupta/10-things-every-javascript-developer-should-know-21l5</link>
      <guid>https://forem.com/adarsh-gupta/10-things-every-javascript-developer-should-know-21l5</guid>
      <description>&lt;p&gt;JavaScript is one of the most popular and widely used programming languages.&lt;/p&gt;

&lt;p&gt;When asked what JavaScript does 20 years ago, a JavaScript developer would simply say that it is used to script websites. Now he will say that he can use JavaScript for frontend development, backend development, mobile application development, desktop application development, game development, AR/VR development, and more.&lt;/p&gt;

&lt;p&gt;A lot of frameworks and libraries are there for JavaScript. These frameworks and libraries are just a piece of cake if your Javascript fundamentals are strong and clear. A lot of concepts are a bit overwhelming for developers, but a good knowledge of these concepts will help you in the long run.&lt;/p&gt;

&lt;p&gt;Frameworks and libraries come and go, but the fundamentals always remain the same. It’s easy to build any kind of application and learn to use any framework and library if the fundamentals are clear. Despite JavaScript's importance for web and mobile development, many hiring managers aren't aware of what they need in a JavaScript developer.&lt;/p&gt;

&lt;p&gt;If you are an aspiring JavaScript developer, here are 10 important and must-know topics for you that will be handy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scope
&lt;/h2&gt;

&lt;p&gt;Scope defines whether you can access or reference a particular value or expression. We are unable to use a declared variable if it is not included in the current scope. This idea is crucial to understand because it makes it easier to separate logic in your code and makes it easier to read.&lt;/p&gt;

&lt;p&gt;In JavaScript, we have 3 types of scopes:&lt;/p&gt;

&lt;p&gt;Global scope: Variables and expressions can be referred to anywhere in a global scope. This is the default scope.&lt;/p&gt;

&lt;p&gt;Local scope: Variables and expressions can be referenced only within the boundary.&lt;/p&gt;

&lt;p&gt;We declare variables with the &lt;em&gt;let&lt;/em&gt;, &lt;em&gt;const&lt;/em&gt;, and &lt;em&gt;var&lt;/em&gt; keywords. If we declare variables outside of blocks or functions, they will always be global variables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//global scope example
var nameis = "John";  //global scope
let age = 30;   //global scope
const isMarried = false;  //global scope


{
  console.log(nameis, age, isMarried);

  //some useful code
}
function someUsefullfunction() {
  console.log(nameis, age, isMarried);
}

someUsefullfunction();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;em&gt;var&lt;/em&gt; keyword declares a function-scoped or globally-scoped variable, optionally initializing it to a value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//global scope example of var
var nameis = "John";
var age = 30;
var isMarried = false;

function printName() {
  console.log(nameis, age, isMarried); //outputs John 30 false
}

printName()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//local scope example of var


function printName() {
    var nameis = "John";
    var age = 30;
    var isMarried = false;
}

console.log(nameis)//this will show an error
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;var&lt;/em&gt; cannot have block scope, i.e., sections created with a pair of curly braces.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
  {
    var x = 1;
  }
  console.log(x); // 1;   x can be accessed here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;em&gt;let&lt;/em&gt; and &lt;em&gt;const&lt;/em&gt; keywords can belong to the block scope if they are inside a block or boundary. They cannot be accessed outside the block as a global variable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; {
    const x = 1;
    let y=x*x
 }
  console.log(y); // ReferenceError: y is not defined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Hoisting
&lt;/h2&gt;

&lt;p&gt;When developers are unclear about the concept of hoisting in JavaScript, they frequently encounter unexpected outcomes. Before the execution of the code, the interpreter appears to move the declaration of functions, variables, or classes to the top of their scope. This process is known as JavaScript hoisting. Hoisting allows functions to be safely used in code before they are declared.&lt;/p&gt;

&lt;p&gt;Hoisting lets you use a function before you declare it in your code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 FavoriteYoutuber("Mr. Beast");

  function FavoriteYoutuber(name) {
  console.log("My Favorite Youtuber  is " + name);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also hoist your variables, but keep in mind that if you declare them with var, the default initialization of the &lt;em&gt;var&lt;/em&gt; is undefined, whereas &lt;em&gt;let&lt;/em&gt; and &lt;em&gt;const&lt;/em&gt; are also hoisted but, unlike &lt;em&gt;var&lt;/em&gt;, are not initialized with a default value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 console.log(num); // Returns 'undefined' from hoisted var declaration
 var num = 6; // Initialization and declaration.
 console.log(num); // Returns 6 after the line with initialization is  executed.



 console.log(numberofsix); // Throws ReferenceError exception as the variable value is uninitialized
 let numberofsix = 6; // Initialization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Callbacks
&lt;/h2&gt;

&lt;p&gt;You'll get much better at JavaScript once you comprehend how callback functions function, which is a crucial component of the language. A callback is a function that is passed as an argument to another function, and its execution is delayed until that function to which it is passed is executed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//callback function with parameters and return value

function greeting(parameter) {
  console.log(parameter);
}
function callBackFunction(callback) {
  callback("Hello World");
   console.log("I am in a callback function");

}

callBackFunction(greeting);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Here you can see the greeting function is passed as an argument to the callBackFunction, and it executes the greeting function and then the calling function.&lt;/p&gt;

&lt;p&gt;Callback functions are beneficial for brief asynchronous operations with two to three nested callbacks or less, but not for longer operations. Imagine a callback having many nested callbacks inside of it; it would appear like this.&lt;/p&gt;

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

&lt;p&gt;This issue is resolved and made easier for programmers by promises and async/await.&lt;/p&gt;

&lt;h2&gt;
  
  
  Promises
&lt;/h2&gt;

&lt;p&gt;A promise is an object that has the potential to produce only one value in the future: either a resolved value or an explanation for why it cannot be resolved (such as a network error). There are three possible states for a promise: fulfilled, rejected, or pending.&lt;/p&gt;

&lt;p&gt;Pending state: The initial stage in which the result is unknown because the operation has not yet been completed.&lt;/p&gt;

&lt;p&gt;Fulfilled state: Promises that have been successfully carried out and have produced value are said to be in a fulfilled state.&lt;/p&gt;

&lt;p&gt;Rejected state: The condition of a promise signifying a failed operation along with the cause of the failure.&lt;/p&gt;

&lt;p&gt;Let's look at an example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
let promise = new Promise(function (resolve, reject) {
  if (0 == 1) {
    resolve("Heyyy") //This will not work  0!=1

  } 

  else reject("0 is not equal to 1"); // This will work 
});

 promise
  .then(function (data) {
    console.log(data);
  })
  .catch(function (error) {
    console.log(error);
  });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, promises are demonstrated clearly. It promises to return something resolved or else rejected. In this situation, it is rejected because of 0!=1 and returns with a message “0 is not equal to 1”.&lt;/p&gt;

&lt;p&gt;We use .then () and .catch() methods so that we can return the value of the called handler, i.e., resolve or reject it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Async &amp;amp; Await
&lt;/h2&gt;

&lt;p&gt;Asynchronous JavaScript has never been easy. We have used callbacks for a while. Then, we employed promises. We use asynchronous functions most of the time now.&lt;/p&gt;

&lt;p&gt;Asynchronous programming is handy when it is required that a certain piece of code should be executed only after the code above it is successfully executed. To handle this scenario, JavaScript introduced async/await in ECMAScript 2017.&lt;/p&gt;

&lt;p&gt;Asynchronous functions contain the async keyword. You can use it in a normal function declaration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
  async function functionName (arguments) {
    // asynchronously do something here
}

//Arrow functions also work fine with async


 const functionName = async (arguments) =&amp;gt; {
    // Do something asynchronous
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's look at an example where we need things to work asynchronously.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
function shootVideo() {
  setTimeout(() =&amp;gt; {
    console.log("Shooting video...");
  },2000);
}
function editVideo(){
    setTimeout(() =&amp;gt; {
        console.log("Editing video...");
    },1000)
}

function uploadOnYoutube(){
        console.log("Uploading video on youtube...");
}
function uploadVideo() {
  shootVideo();
  editVideo();
  uploadOnYoutube();
}

uploadVideo()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here the output will be:&lt;/p&gt;

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

&lt;p&gt;This is not the intended way to upload a video. Now with the help of asynchronous JavaScript, let's see how things work.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
function shootVideo() {
  return new Promise((resolve, reject) =&amp;gt; {
    setTimeout(() =&amp;gt; {
      resolve(console.log("Shooting video..."));
    }, 2000);
  });
}
function editVideo() {
  return new Promise((resolve, reject) =&amp;gt; {
    setTimeout(() =&amp;gt; {
      resolve(console.log("Editing video..."));
    }, 1000);
  });
}

function uploadOnYoutube() {
  return new Promise((resolve, reject) =&amp;gt; {
    setTimeout(() =&amp;gt; {
      resolve(console.log("Uploading video on youtube..."));
    }, 1000);
  });
}
async function uploadVideo() {
  await shootVideo();
  await editVideo();
  await uploadOnYoutube();
}

uploadVideo();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now our output is as expected:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Closure
&lt;/h2&gt;

&lt;p&gt;A closure is a feature in JavaScript where an inner function has access to the outer (enclosing) function’s variables.&lt;/p&gt;

&lt;p&gt;The inner function can access the variables defined in its scope, the scope of its parent functions, or even its grandparent functions, and the global variables. But the outer function can not have access to the inner function variable (Scoping).&lt;/p&gt;

&lt;p&gt;Let's now see a visual example of this:&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//javascript closure grandparent example
function grandparent() {
    let car="BMW"
    var parent = function () {
        let house="4BHK"
        var child = function () {
            return ("The child gets " + car + " and " + house);
        };
        return child;
    };
    return parent;
}

console.log( grandparent()()()) //The Child gets BMW and 4BHK house
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case, the grandparent is unable to access anything that belongs to either the parent or the child, whereas the child can access it from both of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Immediately Invoked Function Expression
&lt;/h2&gt;

&lt;p&gt;An Immediately Invoked Function Expression is a JavaScript function that runs as soon as it is defined.&lt;/p&gt;

&lt;p&gt;IIFEs are incredibly helpful because they can be used to easily isolate variable declarations while not contaminating the global object. Therefore, the primary reason to use IIFE is to immediately execute the code and obtain data privacy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
(function(){
    console.log('IIFE');
}
)();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The wrapping parentheses ( /* function */ )() are actually what make our function, internally, be considered as an expression.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modular Programming
&lt;/h2&gt;

&lt;p&gt;A module is a compact piece of independent, reusable code in JavaScript. Any non-trivial JavaScript-based application must be built using modules, which are the cornerstone of many JavaScript design patterns.&lt;/p&gt;

&lt;p&gt;Using modules has the benefit of making it more maintainable, among other things. When a module is isolated from other pieces of code, updating that module is much simpler.&lt;/p&gt;

&lt;p&gt;Reusability is another advantage of using modules, which can reduce code redundancy.&lt;/p&gt;

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

&lt;p&gt;Let's make a module for finding out if a year is a leap or not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                   IsLeapYear.js

//module for checking if a year is a leap

export default function isLeapYear(year) {
    return (year % 4 == 0 &amp;amp;&amp;amp; year % 100 != 0)
            || year % 400 == 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For determining whether a given year is a leap year or not, we now have a standalone module. Importing the file and calling the function are the only steps left to take.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//import is leap year
import isLeapYear from './isLeapYear.js';

isLeapYear(2000)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Memoization &amp;amp; Performance Enhancing
&lt;/h2&gt;

&lt;p&gt;The programming technique called Memoization improves function performance by caching previously computed results. JavaScript objects make excellent candidates for caches because of how they behave like associative arrays.&lt;/p&gt;

&lt;p&gt;Each time a memoized function is called, its parameters are used to index the cache.&lt;/p&gt;

&lt;p&gt;If the data is present, then it can be returned without executing the entire function. However, if the data is not cached, then the function is executed, and the result is added to the cache.&lt;/p&gt;

&lt;p&gt;Let's look at an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; console.time("Fibonacci");
 function Fibonacci(n) {
  if (n &amp;lt; 2) {
    return 1;
  } else
  return Fibonacci(n - 1) + Fibonacci(n - 2);
}
console.log(Fibonacci(40));
console.timeEnd("Fibonacci");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This simple program to find the 40th Fibonacci number took almost 2 seconds to complete.&lt;/p&gt;

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

&lt;p&gt;The search for the 100th Fibonacci term would be extremely time-consuming if we clung to this method.&lt;/p&gt;

&lt;p&gt;Now let's just include our memoization technique here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
console.time("Fibonacci");
function Fibonacci(n, memo = {}) {
  if (n in the memo) {
    return memo[n];
  }

  if (n &amp;lt; 2) {
    return 1;
  } else memo[n] = Fibonacci(n - 1, memo) + Fibonacci(n - 2, memo);

  return memo[n];
}
console.log(Fibonacci(40));
console.timeEnd("Fibonacci");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Including a simple memo variable just increased the performance of the function 10x, from 2 seconds to 12 ms.&lt;/p&gt;

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

&lt;p&gt;This time, our function ran in just 12.957 milliseconds. What happens is that a memoized function "remembers" the outputs associated with a particular set of inputs. The result is returned rather than being recalculated in subsequent calls with remembered inputs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Error Handling
&lt;/h2&gt;

&lt;p&gt;There is a possibility that while writing code you will reach a point where a bug prevents you from continuing, so you must be a problem solver here.&lt;/p&gt;

&lt;p&gt;No matter if you are working on the front end or the back end, for 'handling' errors in the first year or so, you will probably use &lt;em&gt;console.log&lt;/em&gt; or possibly &lt;em&gt;console.error&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;You need to change that if you want to write good applications and swap out your lazy logs for properly handled errors. You might want to look into creating your own Error constructor, learning how to catch errors properly, and displaying errors to users.&lt;/p&gt;

&lt;p&gt;No matter how good a programmer we are, occasionally our scripts contain errors.&lt;/p&gt;

&lt;p&gt;They might happen as a result of mistakes we make, resulting in unexpected user input, an incorrect server response, or for a myriad of other reasons. Typically, when a script encounters an error, it immediately terminates and prints the error to the console.&lt;/p&gt;

&lt;p&gt;However, there is a syntax construct known as try...catch that enables us to catch errors and prevent the script from terminating prematurely.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;try {

    // code...

  } catch (err) {

    // error handling

  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;It's a strange language, JavaScript. But when you look closer, you typically understand why things operate that way.&lt;/p&gt;

&lt;p&gt;I sincerely hope that this list will help you understand some of the crucial JavaScript concepts that you should know, and if you are aware of any additional concepts that are noteworthy, please mention them in the comments section :)&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to get Paid in Your JavaScript Applications with LemonSqueezy</title>
      <dc:creator>adarsh</dc:creator>
      <pubDate>Sat, 10 Aug 2024 05:06:31 +0000</pubDate>
      <link>https://forem.com/adarsh-gupta/how-to-get-paid-in-your-javascript-applications-with-lemonsqueezy-8om</link>
      <guid>https://forem.com/adarsh-gupta/how-to-get-paid-in-your-javascript-applications-with-lemonsqueezy-8om</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;NOTE: I don’t want paywall to block the learning, here is the friendly&lt;/em&gt; &lt;a href="https://adarsh-gupta.medium.com/how-to-get-paid-in-your-javascript-applications-with-lemonsqueezy-a46fa846643b?sk=d16ed12e61b520028ba31e83bcc6649f" rel="noopener noreferrer"&gt;&lt;em&gt;link&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;First of all, we software developers are really lucky, we can build products, courses and even start a complete B2B business from scratch.&lt;/p&gt;

&lt;p&gt;But the one thing that will be holding you back will be how to accept payments.&lt;/p&gt;

&lt;p&gt;The problem with this is sometimes we will have international clients and you can directly send money. For example, if you are in India like me I can send money via UPI to anyone in India who has a bank account but not to someone who is in the USA due to regulations.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How LemonSqueezy Solves this problem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The solution to this problem is to use a payment gateway that can handle international transactions. One such gateway that’s gaining popularity among developers is LemonSqueezy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1723265450755%2F8c7b0731-5990-4ce6-bb25-2e2494c3fc1d.webp%2520align%3D" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1723265450755%2F8c7b0731-5990-4ce6-bb25-2e2494c3fc1d.webp%2520align%3D"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s not just a payment processor; it’s a complete payment platform brought up for digital products and services.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why LemonSqueezy
&lt;/h3&gt;

&lt;p&gt;LemonSqueezy is designed with developers in mind. It provides a simple API that you can easily integrate into your JavaScript applications. Whether you’re selling a SaaS product, digital downloads, or online courses, LemonSqueezy is what you need.&lt;/p&gt;

&lt;p&gt;Note: Stripe is also great, now that Stripe acquired Lemon squezy, it's the best reason to start using it.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Getting Started&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Sign up for a LemonSqueezy account. It’s free to start; you only pay when you make sales.&lt;br&gt;&lt;br&gt;
Create your product in the LemonSqueezy dashboard. You can set up one-time purchases, subscriptions, or even pay-what-you-want models.&lt;/p&gt;

&lt;p&gt;The flow of the LemonSqueezy platform is shown below&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Store, where you have products&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Products, where you have variants of the product&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Variants, which can be Subscription, One-time Payment, Yearly payment&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now, install the LemonSqueezy SDK in your JavaScript project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @lemonsqueezy/lemonsqueezy.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initialize the SDK in your application&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const configureLemonSqueezy = lemonSqueezySetup({
  apiKey: process.env.LEMON_SQUEEZY_API_KEY,
  onError(error) {
    console.log(error);
  },
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you are all set to start the actual LemonSqueezy thing. We need to have a checkout URL, so that we can send our users to a payment gateway.&lt;/p&gt;

&lt;p&gt;The main arguments, that we need for the checkout URL are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Store ID&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Variant ID&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Checkout options&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;From the frontend of your code you can send the Variant ID and the store can be hard-coded as it is less likely to change&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import {
  lemonSqueezySetup,
  type Variant,
} from "@lemonsqueezy/lemonsqueezy.js";

export async function getCheckoutURL(variantId: number, embed = true) {

  if (!Number.isInteger(variantId) || variantId &amp;lt;= 0) {
    throw new Error("Invalid variantId. Must be a positive integer.");
  }
  if (typeof embed !== "boolean") {
    throw new Error("Invalid embed value. Must be a boolean.");
  }
  const { userId } = auth();
  const user = await currentUser();

  // get emailj
  const userEmail = user?.emailAddresses[0].emailAddress ?? "";

  const checkout = await createCheckout(
    process.env.LEMONSQUEEZY_STORE_ID as string,
    variantId,
    {
      checkoutOptions: {
        embed,
        media: true,
        logo: true,
        dark: true,
      },
      checkoutData: {
        email: userEmail,
        custom: {
          user_id: userId,
        },
      },

      productOptions: {
        enabledVariants: [variantId],
        redirectUrl: `${process.env.NEXT_PUBLIC_APP_URL}/dashboard/billing/`,
        receiptButtonText: "Go to Dashboard",
        receiptThankYouNote: "Thank you for signing up to Lemon Stand!",
      },
    }
  );


  return checkout.data?.data.attributes.url;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now with this, you can process the payment in your application. But there is a problem: How do we track all these?&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;LemonSqueezy Webhooks&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you don’t know what webhooks are, here is a simple explanation:&lt;/p&gt;

&lt;p&gt;A webhook is an event triggered when a certain event happens and which will send a POST request to your endpoint and you can catch that event and later process it.&lt;/p&gt;

&lt;p&gt;LemonSqueezy makes it easy to handle webhooks, the SDK provides various methods to work with webhooks. You should grab your webhook secret from the LemonSqueezy console first.&lt;/p&gt;

&lt;p&gt;And then in you &lt;em&gt;/api/webhooks/route.ts,&lt;/em&gt; you can have a POST endpoint.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export async function POST(request: Request) {
  try {
    if (!process.env.LEMONSQUEEZY_WEBHOOK_SECRET) {
      return new Response("Lemon Squeezy Webhook Secret not set in .env", {
        status: 400,
      });
    }
  } catch (error) {
    console.log(error);
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we need to make sure the request is from Lemon Squeezy and not from some internet nerds to protect our application.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const rawBody = await request.text();
  const secret = process.env.LEMONSQUEEZY_WEBHOOK_SECRET;

  const hmac = crypto.createHmac("sha256", secret);
  const digest = Buffer.from(hmac.update(rawBody).digest("hex"), "utf8");
  const signature = Buffer.from(
    request.headers.get("X-Signature") || "",
    "utf8"
  );

  if (!crypto.timingSafeEqual(digest, signature)) {
    throw new Error("Invalid signature.");
  }
  console.log("Signature verified");

  const data = JSON.parse(rawBody) as unknown;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We need to temporarily store the data of the webhook, just to keep track if a webhook fails.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export async function storeWebhookEvent(eventName: string, body: any) {
  const { data, error } = await supabase
    .from("webhook_events")
    .upsert(
      [
        {
          user_id: body.meta.custom_data.user_id,
          event_name: eventName,
          body,
        },
      ],
      { onConflict: "id" }
    )
    .select();

  if (error) {
    throw error;
  }
  return data;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we can process the webhook depending up on your needs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export async function processWebhookEvent(webhookEvent: any) {
  try {
    const { data: dbWebhookEvent, error } = await supabase
      .from("webhook_events")
      .select("*")
      .eq("id", webhookEvent[0].id)
      .single();

    if (error || !dbWebhookEvent) {
      throw new Error(
        `Webhook event #${webhookEvent.id} not found in the database.`
      );
    }
  } catch (error) {
    console.error(error);
  }

  const eventBody = webhookEvent[0].body;


  if (
    webhookEvent[0].event_name.startsWith("subscription_updated") ||
    webhookEvent[0].event_name.startsWith("subscription_created")
  ) {
    const attributes = eventBody.data.attributes;
    const variantId = attributes.variant_id;

    const { data: plan, error: planError } = await supabase
      .from("plans")
      .select("*")
      .eq("variant_id", variantId)
      .single();

    if (planError || !plan) {
      throw new Error(`Plan with variantId ${variantId} not found.`);
    }
    let priceId = eventBody.data.attributes.first_subscription_item.price_id;
    let lPrice = await getPrice(priceId);

    const updateData = {
      lemon_squeezy_id: eventBody.data.id,
      order_id: attributes.order_id,
      status: attributes.status,
      renews_at: attributes.renews_at,
      ends_at: attributes.ends_at,
      trial_ends_at: attributes.trial_ends_at,
      price: lPrice.data?.data.attributes.unit_price,
      is_paused: attributes.status == "paused" ? true : false,
      subscription_item_id: attributes.first_subscription_item.id,
      is_usage_based: attributes.first_subscription_item.is_usage_based,
      user_id: eventBody.meta.custom_data.user_id,
      plan_id: plan.id,
    };

    const { error: upsertError } = await supabase
      .from("subscriptions")
      .upsert([updateData], { onConflict: "lemon_squeezy_id" });
    if (upsertError) {
      throw new Error(`Failed to upsert subscription: ${upsertError.message}`);
    }

    /** 
     * Mark the webhook event as processed
     * You can remove the webhook from the db if it is processed successfully
     * Implement this in your DB
    */



}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can have various utility functions like &lt;em&gt;pauseUserSubscription, cancelSub etc&lt;/em&gt; to make your app complete.&lt;/p&gt;

&lt;p&gt;LemonSqueezy provides methods to implement this, here is a dummy code for you to cancel the subscription&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export async function cancelSub(id: string) {
  // Get user subscriptions
  const userSubscriptions = await getUserSubscription();

  // Check if the subscription exists
  const subscription = userSubscriptions?.find(
    (sub) =&amp;gt; sub.lemon_squeezy_id === id
  );

  if (!subscription) {
    throw new Error(`Subscription #${id} not found.`);
  }

  const cancelledSub = await cancelSubscription(id);

  console.log(cancelledSub, "cancelledSub");

  if (cancelledSub.error) {
    throw new Error(cancelledSub.error.message);
  }

  // Update the db
  try {
   //DB logic
  } catch (error) {
    throw new Error(`Failed to cancel Subscription #${id} in the database.`);
  }

  revalidatePath("/");

  return cancelledSub;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. That’s all you need to get started with payment processing.&lt;/p&gt;

&lt;p&gt;Now, you can check the documentation for your custom needs and use case and try building this on your own and you will see how easy it is to work with LemonSqueezy&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this detailed blog on LemonSqueezy, we learned how to implement payment processing in your full-stack application.&lt;/p&gt;

&lt;p&gt;If you learned something new and useful, share this post with others.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>JavaScript + OOPs</title>
      <dc:creator>adarsh</dc:creator>
      <pubDate>Tue, 09 Jul 2024 10:29:30 +0000</pubDate>
      <link>https://forem.com/adarsh-gupta/javascript-oops-2elb</link>
      <guid>https://forem.com/adarsh-gupta/javascript-oops-2elb</guid>
      <description>&lt;p&gt;OOP — or Object-Oriented Programming — can help you organize your code in a more logical and manageable way, and it can make it easier to reuse and extend your code in the future.&lt;/p&gt;

&lt;p&gt;In JavaScript, object-oriented programming (OOP) is a programming paradigm that is based on the concept of “objects”, which are collections of data and functions that work together to perform certain tasks.&lt;/p&gt;

&lt;p&gt;In OOP, objects are created from “classes”, which are templates that define the properties and methods of the objects they create.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advantages of OOP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the key advantages of using OOP in JavaScript is that it allows you to organize your code in a more logical and manageable way. With OOP, you can create classes that represent real-world objects and define the properties and methods that those objects have. This makes it easier to understand and work with your code, especially as it grows in complexity.&lt;/p&gt;

&lt;p&gt;Another benefit of OOP in JavaScript or programming is that it allows for code reuse and extensibility.&lt;/p&gt;

&lt;p&gt;Once you have defined a class, you can create as many objects from that class as you need. This can save you a lot of time and effort because you don’t have to write the same code over and over again for each object.&lt;/p&gt;

&lt;p&gt;Additionally, you can create new classes that inherit from existing classes, which allows you to reuse and extend the functionality of existing code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting started with OOP&lt;/strong&gt;&lt;br&gt;
To get started with OOP in JavaScript, you first need to understand the concept of a class. In JavaScript, a class is a template that defines the properties and methods of the objects it creates. Here is an example of a simple class that represents a person:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  greet() {
    console.log(`Hi, my name is ${this.name} and I am ${this.age} years old.`);
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the Person class has two properties: name and age. It also has one method, greet(), which outputs a greeting to the console.&lt;/p&gt;

&lt;p&gt;To create an object from this class, you use the new keyword followed by the name of the class, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const person1 = new Person("John", 25);
const person2 = new Person("Jane", 30);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you have created an object, you can access its properties and methods using dot notation, like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OOP Inheritance in JavaScript&lt;/strong&gt;&lt;br&gt;
In addition to defining classes and creating objects, OOP in JavaScript also allows for inheritance. This means that you can create new classes that inherit the properties and methods of existing classes. For example, let’s say you want to create a Student class that represents a student at a school. The Student class could inherit from the Person class, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Student extends Person {
  constructor(name, age, school) {
    super(name, age);
    this.school = school;
  }
  info() {
    console.log(`${this.name} is ${this.age} years old and goes to ${this.school}.`);
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Four Pillars of OOPS&lt;/strong&gt;&lt;br&gt;
The four pillars of object-oriented programming (OOP) in JavaScript are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Encapsulation:&lt;/strong&gt;&lt;br&gt;
Encapsulation refers to the idea of wrapping data and functionality together inside an object. In OOP, objects are the basic building blocks of your code, and each object has its own properties and methods. This allows you to organize your code in a way that makes it easier to understand and work with.&lt;/p&gt;

&lt;p&gt;For example, you might create a Person class that has properties like name and age, and methods like greet() and introduce().&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Abstraction&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Abstraction is the process of hiding the details of an object’s implementation and only exposing the necessary information to the user. In OOP, you can use abstraction to make your code more modular and flexible.&lt;/p&gt;

&lt;p&gt;For example, you can define an abstract class that provides a common interface for a group of related objects, without specifying how those objects are implemented.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inheritance:&lt;/strong&gt;&lt;br&gt;
Inheritance is the process of creating new classes that inherit the properties and methods of existing classes. This allows you to reuse and extend existing code, which can save you time and effort.&lt;/p&gt;

&lt;p&gt;For example, if you have a Person class that defines common properties and methods for a person, you can create a Student class that inherits from the Person class and adds additional functionality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Polymorphism:&lt;/strong&gt;&lt;br&gt;
Polymorphism is the ability of different objects to respond to the same method call in different ways. In OOP, polymorphism allows you to create objects that share a common interface, but have different implementations. This makes your code more flexible and allows you to write code that is more easily maintainable and extensible.&lt;/p&gt;

&lt;p&gt;For example, you can create a Shape class that defines a common draw() method, and then create subclasses for different types of shapes (e.g. Circle, Rectangle, etc.) that each implement the draw() method in their own way.&lt;/p&gt;

&lt;p&gt;Here is an example of how these pillars of OOP might be used in a JavaScript program:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Encapsulation: define a Person class with properties and methods
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  greet() {
    console.log(`Hi, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

// Inheritance: define a Student class that inherits from the Person class
class Student extends Person {
  constructor(name, age, school) {
    super(name, age);
    this.school = school;
  }
  info() {
    console.log(`${this.name} is ${this.age} years old and goes to ${this.school}.`);
  }
}

// Abstraction: define an abstract Shape class with a common draw() method
abstract class Shape {
  abstract draw(): void;
}

// Polymorphism: define subclasses of Shape that implement the draw() method in their own way
class Circle extends Shape {
  draw() {
    console.log("Drawing a circle...");
  }
}
class Rectangle extends Shape {
  draw() {
    console.log("Drawing a rectangle...");
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Wrapping Up&lt;/strong&gt;&lt;br&gt;
Object-oriented programming is a fundamental concept in JavaScript and can greatly improve the structure and organization of your code. By understanding and implementing concepts such as encapsulation, inheritance, and polymorphism, you can create more efficient and maintainable programs.&lt;/p&gt;

&lt;p&gt;Whether you’re a beginner or an experienced developer, taking the time to master OOP in JavaScript will pay off in the long run. Thanks for reading, and happy coding.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>React JS Netflix Clone??</title>
      <dc:creator>adarsh</dc:creator>
      <pubDate>Tue, 21 Sep 2021 06:12:46 +0000</pubDate>
      <link>https://forem.com/adarsh-gupta/react-js-netflix-clone-13m4</link>
      <guid>https://forem.com/adarsh-gupta/react-js-netflix-clone-13m4</guid>
      <description>&lt;h1&gt;
  
  
  Do you wanna create NETFLIX clone using React??
&lt;/h1&gt;

&lt;p&gt;check this link&lt;br&gt;
&lt;a href="https://youtube.com/playlist?list=PLwgM1ly3fmki4Tt8nj87Ow67lf0C-WwHa" rel="noopener noreferrer"&gt;video link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So  I have created a video where you can learn concepts like &lt;br&gt;
react js state,useState hook ,useEFFECT hook and api calling via a simple project do check that&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
