<?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>DEV Community: Digvijay Jadhav</title>
    <description>The latest articles on DEV Community by Digvijay Jadhav (@digvijayjadhav98).</description>
    <link>https://dev.to/digvijayjadhav98</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%2F720472%2F2cc51988-a1a0-4b44-9c51-4aa920e017e8.png</url>
      <title>DEV Community: Digvijay Jadhav</title>
      <link>https://dev.to/digvijayjadhav98</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/digvijayjadhav98"/>
    <language>en</language>
    <item>
      <title>From Repetitive Code to Clean Architecture: How the Decorator Pattern Simplified Activity Logging by 70%</title>
      <dc:creator>Digvijay Jadhav</dc:creator>
      <pubDate>Fri, 07 Nov 2025 10:50:06 +0000</pubDate>
      <link>https://dev.to/digvijayjadhav98/from-repetitive-code-to-clean-architecture-how-the-decorator-pattern-simplified-activity-logging-1kb3</link>
      <guid>https://dev.to/digvijayjadhav98/from-repetitive-code-to-clean-architecture-how-the-decorator-pattern-simplified-activity-logging-1kb3</guid>
      <description>&lt;p&gt;We had activity logging across our entire application - typical audit trail stuff that tracks user actions throughout the system. The initial implementation was straightforward: add logging calls directly in the service methods.&lt;/p&gt;

&lt;p&gt;It worked perfectly. Shipped on time, no issues in production. But after a few months of adding new features, the pattern became obvious - we had the same logging boilerplate repeated across dozens of methods.&lt;/p&gt;

&lt;p&gt;Not broken. Not urgent. Just... inefficient.&lt;/p&gt;

&lt;p&gt;Here's what the pattern looked like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async someServiceMethod(
  userId: string,
  data: string,
  context?: { ipAddress?: string; userAgent?: string }
) {
  try {
    const result = await performOperation(userId, data);
    *// Success logging - 12 lines every single time*
    this.activityLogService
      .logActivity({
        userId,
        actionType: "RESOURCE_ACTION",
        resourceId: result.id,
        resourceName: result.name,
        ipAddress: context?.ipAddress,
        userAgent: context?.userAgent,
        status: "SUCCESS",
      })
      .catch((err) =&amp;gt; {
        console.error("Failed to log activity:", err);
      });
    return result;
  } catch (error) {
    *// Failure logging - another 12 lines*
    this.activityLogService
      .logActivity({
        userId,
        actionType: "RESOURCE_ACTION",
        resourceName: data,
        ipAddress: context?.ipAddress,
        userAgent: context?.userAgent,
        status: "FAILED",
        errorMessage: error instanceof Error ? error.message : "Unknown error",
      })
      .catch((err) =&amp;gt; {
        console.error("Failed to log activity failure:", err);
      });
    throw error;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Multiply this by every service method that needed logging - we're talking about hundreds of lines of repetitive try-catch blocks doing essentially the same thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The One-Day Refactor Decision
&lt;/h2&gt;

&lt;p&gt;We then thought of optimizing this, This is a perfect use case for decorators.&lt;/p&gt;

&lt;p&gt;The decision was straightforward - we had a cross-cutting concern that was cluttering business logic. Decorators would let us declare the logging behavior and keep the methods focused on what they actually do.&lt;/p&gt;

&lt;p&gt;Not a revolutionary insight. Just recognizing when the right tool fits the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Target Design
&lt;/h2&gt;

&lt;p&gt;The goal was simple - declarative logging that doesn't clutter the business logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@LogActivity({
  actionType: "RESOURCE_ACTION",
  resourceType: "RESOURCE"
})
async someServiceMethod(
  userId: string,
  data: string,
  context?: { ipAddress?: string; userAgent?: string }
) {
  const result = await performOperation(userId, data);
  return result;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clean business logic, logging concern declared at the method level. That's it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Configuration
&lt;/h3&gt;

&lt;p&gt;TypeScript decorators need to be enabled:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Interface Design
&lt;/h3&gt;

&lt;p&gt;The decorator configuration needed to handle different method signatures and extract resource information from both successful results and failed attempts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export interface LogActivityConfig {
  actionType: string;
  resourceType: string;

  paramMapping?: {
    userId?: number | string;  *// Supports both index and nested paths*
    context?: number;
  };

  extractResource?: (result: any, params: any[]) =&amp;gt; {
    resourceId?: string;
    resourceName?: string;
    metadata?: any;
  };

  extractResourceFromParams?: (params: any[]) =&amp;gt; {
    resourceId?: string;
    resourceName?: string;
    metadata?: any;
  };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key design decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flexible parameter mapping for different method signatures&lt;/li&gt;
&lt;li&gt;Separate extraction functions for success/failure cases&lt;/li&gt;
&lt;li&gt;Optional metadata support for additional context&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Decorator Implementation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export function LogActivity(config: LogActivityConfig) {
  return function (
    target: any,
    propertyKey: string,
    descriptor: PropertyDescriptor
  ) {
    const originalMethod = descriptor.value;
    const activityLogService = ActivityLogService.getInstance();

    descriptor.value = async function (...args: any[]) {
      *// Extract userId from parameters*
      let userId: string;
      if (typeof config.paramMapping?.userId === "string") {
        const parts = config.paramMapping.userId.split(".");
        let value: any = args[0];
        for (const part of parts) {
          value = value?.[part];
        }
        userId = value;
      } else {
        const userIdIndex = config.paramMapping?.userId ?? 0;
        userId = args[userIdIndex];
      }

      const contextIndex = config.paramMapping?.context ?? args.length - 1;
      const context = args[contextIndex];

      try {
        const result = await originalMethod.apply(this, args);

        const { resourceId, resourceName, metadata } =
          config.extractResource?.(result, args) || {};

        *// Non-blocking success logging*
        activityLogService
          .createActivityLog({
            userId,
            actionType: config.actionType,
            resourceType: config.resourceType,
            resourceId,
            resourceName,
            metadata,
            ipAddress: context?.ipAddress,
            userAgent: context?.userAgent,
            status: "SUCCESS",
          })
          .catch((err) =&amp;gt; 
            console.error(`Failed to log ${config.actionType}:`, err)
          );

        return result;

      } catch (error) {
        const { resourceId, resourceName, metadata } =
          config.extractResourceFromParams?.(args) || {};

        *// Non-blocking failure logging*
        activityLogService
          .createActivityLog({
            userId,
            actionType: config.actionType,
            resourceType: config.resourceType,
            resourceId,
            resourceName,
            metadata,
            ipAddress: context?.ipAddress,
            userAgent: context?.userAgent,
            status: "FAILED",
            errorMessage: error instanceof Error ? error.message : "Unknown error",
          })
          .catch((err) =&amp;gt; 
            console.error(`Failed to log ${config.actionType}:`, err)
          );

        throw error;
      }
    };

    return descriptor;
  };
}

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

&lt;/div&gt;



&lt;p&gt;Critical implementation details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logging operations are non-blocking (won't break main functionality)&lt;/li&gt;
&lt;li&gt;Original errors are always re-thrown unchanged&lt;/li&gt;
&lt;li&gt;Decorator preserves original method behavior completely&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;Before (213 lines across a service):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export class ServiceClass {
  private activityLogService: ActivityLogService;

  constructor() {
    this.activityLogService = ActivityLogService.getInstance();
  }

  async someMethod(userId: string, data: string, context?: Context) {
    try {
      const result = await performOperation(userId, data);

      this.activityLogService
        .logActivity({
          userId,
          actionType: "ACTION_TYPE",
          resourceId: result.id,
          resourceName: result.name,
          ipAddress: context?.ipAddress,
          userAgent: context?.userAgent,
          status: "SUCCESS",
        })
        .catch((err) =&amp;gt; console.error("Failed to log:", err));

      return result;
    } catch (error) {
      this.activityLogService
        .logActivity({
          userId,
          actionType: "ACTION_TYPE",
          resourceName: data,
          ipAddress: context?.ipAddress,
          userAgent: context?.userAgent,
          status: "FAILED",
          errorMessage: error.message,
        })
        .catch((err) =&amp;gt; console.error("Failed to log:", err));

      throw error;
    }
  }

  *// Same pattern repeated for every method...*
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After (139 lines - 35% reduction):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export class ServiceClass {
  @LogActivity({
    actionType: "ACTION_TYPE",
    resourceType: "RESOURCE",
    paramMapping: { userId: 0, context: 2 },
    extractResource: (result) =&amp;gt; ({
      resourceId: result.id,
      resourceName: result.name,
    }),
    extractResourceFromParams: (params) =&amp;gt; ({
      resourceName: params[1],
    }),
  })
  async someMethod(userId: string, data: string, context?: Context) {
    const result = await performOperation(userId, data);
    return result;
  }

  @LogActivity({
    actionType: "ANOTHER_ACTION",
    resourceType: "RESOURCE",
    paramMapping: { userId: 0, context: 3 },
    extractResource: (result, params) =&amp;gt; ({
      resourceId: result.id,
      resourceName: result.name,
      metadata: { additionalInfo: params[2] },
    }),
  })
  async anotherMethod(
    userId: string,
    data: string,
    info: string,
    context?: Context
  ) {
    const result = await performAnotherOperation(userId, data, info);
    return result;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reduction isn't just about line count - the code is now focused on business logic with cross-cutting concerns handled declaratively.&lt;/p&gt;

&lt;h2&gt;
  
  
  Impact
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;70% reduction in logging-related code&lt;/li&gt;
&lt;li&gt;35% overall reduction per service&lt;/li&gt;
&lt;li&gt;Zero changes to business logic behavior&lt;/li&gt;
&lt;li&gt;Maintained 100% test coverage&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Improved Onboarding&lt;/strong&gt;&lt;br&gt;
New developers can immediately understand method intent without parsing logging infrastructure:&lt;/p&gt;

&lt;p&gt;typescript&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@LogActivity({ actionType: "RESOURCE_ACTION", resourceType: "RESOURCE" })&lt;br&gt;
async someMethod(userId: string, data: string, context?: Context) {&lt;br&gt;
  *// Pure business logic*&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Faster Feature Development&lt;/strong&gt;&lt;br&gt;
Adding logging to new methods: add decorator, configure parameters, done. No boilerplate to copy, no edge cases to remember.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simplified Maintenance&lt;/strong&gt;&lt;br&gt;
Need to change logging format globally? Update the decorator. One change propagates everywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Better Code Reviews&lt;/strong&gt;&lt;br&gt;
Reviewers focus on business logic. Cross-cutting concerns are declared, not mixed in with implementation.&lt;/p&gt;
&lt;h2&gt;
  
  
  When This Pattern Applies
&lt;/h2&gt;

&lt;p&gt;Decorators solve a specific problem: you have behavior that needs to be applied consistently across multiple methods, but that behavior is orthogonal to the core business logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Same try-catch pattern across multiple methods&lt;/li&gt;
&lt;li&gt;Cross-cutting concerns mixed with business logic&lt;/li&gt;
&lt;li&gt;Copy-pasting setup/teardown code&lt;/li&gt;
&lt;li&gt;Consistent "before" and "after" logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Other Applications&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the logging decorator was in place, we identified similar opportunities:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication &amp;amp; Authorization:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@RequireAuth()
@RequirePermission("resource.delete")
async deleteResource(resourceId: string, userId: string) {
  *// Just deletion logic*
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Rate Limiting:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@RateLimit({ maxRequests: 10, windowMs: 60000 })
async processRequest(data: RequestData, userId: string) {
  *// Just request processing*
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Performance Monitoring:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@MeasurePerformance({ threshold: 1000, alertOn: "slow" })
async complexOperation(params: OperationParams) {
  *// Just operation logic*
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Caching:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Cache({ ttl: 300, key: (userId) =&amp;gt; `user:${userId}:data` })
async getUserData(userId: string) {
  *// Just data retrieval*
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Implementation Approach
&lt;/h2&gt;

&lt;p&gt;The refactor was straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Built the decorator with proper TypeScript typing&lt;/li&gt;
&lt;li&gt;Applied to one service and verified behavior&lt;/li&gt;
&lt;li&gt;Rolled out incrementally across services&lt;/li&gt;
&lt;li&gt;Added documentation and examples&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Total time: one day of focused work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pragmatism First, Optimization Second&lt;/strong&gt;&lt;br&gt;
The original implementation wasn't wrong - it worked in production without issues. The decorator refactor was an optimization made when the pattern became clear, not a premature abstraction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design Patterns as Refactoring Tools&lt;/strong&gt;&lt;br&gt;
Patterns are most valuable when you recognize them in existing code, not when you try to force them during initial implementation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Incremental Adoption&lt;/strong&gt;&lt;br&gt;
Starting with one service and expanding proved less risky than a wholesale rewrite. Validate the pattern works before committing to it everywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Clear Over Clever&lt;/strong&gt;&lt;br&gt;
The decorator doesn't make the code sophisticated - it makes it clear. Methods now explicitly declare their concerns rather than embedding them in implementation.&lt;/p&gt;

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

&lt;p&gt;This refactor wasn't about applying design patterns for their own sake. It was about recognizing a specific problem - repetitive cross-cutting concerns cluttering business logic - and using the appropriate tool to solve it.&lt;/p&gt;

&lt;p&gt;The result: less code, better maintainability, and clearer separation of concerns. Sometimes the best refactor is the one you didn't do upfront, but recognized when the need became obvious.&lt;/p&gt;

</description>
      <category>designpatterns</category>
      <category>webdev</category>
      <category>backend</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Checklist for a Successful Website Launch</title>
      <dc:creator>Digvijay Jadhav</dc:creator>
      <pubDate>Mon, 01 Jul 2024 06:57:48 +0000</pubDate>
      <link>https://dev.to/digvijayjadhav98/checklist-for-a-successful-website-launch-1dop</link>
      <guid>https://dev.to/digvijayjadhav98/checklist-for-a-successful-website-launch-1dop</guid>
      <description>&lt;p&gt;Launching a website is an exciting milestone, but it’s crucial to ensure everything is in place for a smooth and successful launch. Here’s a comprehensive checklist to help you cover all essential aspects of your website launch.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Content Checklist:&lt;/strong&gt; Content is the backbone of your website. It engages users, conveys your message, and drives conversions. Ensuring content quality and correctness is paramount.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Check for Incorrect Punctuation:&lt;/strong&gt; Pay particular attention to apostrophes, quotation marks, and hyphens/dashes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remove Test Content:&lt;/strong&gt; Ensure no placeholder or test content remains on the site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic Markup:&lt;/strong&gt; Ensure content is marked up correctly (e.g., headings with &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyword Usage:&lt;/strong&gt; Check for appropriate use of target keywords in the content.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical Checklist:&lt;/strong&gt; Technical optimization improves your website’s performance, security, and user experience.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Remove Unused CSS and JS:&lt;/strong&gt; Clean up any unnecessary CSS and JavaScript files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;External Links:&lt;/strong&gt; Ensure external links have &lt;code&gt;rel="noopener"&lt;/code&gt; 
&lt;code&gt;&amp;lt;a href="http://example.com" target="_blank" rel="noopener"&amp;gt;Some other site&amp;lt;/a&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Form Validations:&lt;/strong&gt; Validate all forms to prevent errors and ensure usability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;XML Sitemap and robots.txt:&lt;/strong&gt; Create and upload an XML sitemap and a robots.txt file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image Optimization:&lt;/strong&gt; Use &lt;code&gt;.webp&lt;/code&gt; format for all images to improve loading times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;404 Page:&lt;/strong&gt; Ensure a custom 404 page is set up for incorrect routes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minify/Compress Files:&lt;/strong&gt; Minify and compress JavaScript, HTML, and CSS files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server-Based Logging:&lt;/strong&gt; Configure server-based logging and measurement tools (e.g., database/web server logging).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS Optimization:&lt;/strong&gt; Optimize your CSS by using short image paths and leveraging the cascading nature of CSS.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO Checklist:&lt;/strong&gt; Good SEO practices improve your website’s visibility and ranking on search engines, driving more traffic to your site.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Meta Tags:&lt;/strong&gt; Ensure each page (static and dynamic) has a title, description, and meta keywords.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alt Tags:&lt;/strong&gt; All images should have descriptive "Alt" tags.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indexing:&lt;/strong&gt; Ensure the website is allowed for indexing by search engines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Social Media Meta Tags:&lt;/strong&gt; Include meta tags for social media sharing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Favicon:&lt;/strong&gt; Ensure a favicon is present.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PWA Meta Tags:&lt;/strong&gt; Include meta tags for Progressive Web Apps.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Functional Checklist:&lt;/strong&gt; Ensuring your website functions correctly across various devices and browsers is critical for providing a seamless user experience.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UI Components:&lt;/strong&gt; Check the rendering and state changes of UI components in response to user actions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser Compatibility:&lt;/strong&gt; Test the website on multiple browsers (Chrome, Firefox, Opera, Safari) using BrowserStack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile Compatibility:&lt;/strong&gt; Test on various mobile devices and screen sizes using BrowserStack’s mobile device emulators and/or your own devices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Testing:&lt;/strong&gt; Run the website through Google PageSpeed Insights and Lighthouse. Address the suggested points and aim for scores above 90.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTPS / SSL:&lt;/strong&gt; Ensure HTTPS and SSL are correctly set up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webmaster Tools:&lt;/strong&gt; Link Google Analytics and Microsoft Clarity to your Webmaster Tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Links and URLs:&lt;/strong&gt; Verify internal and external links, check for broken links, and validate URL structures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Calls:&lt;/strong&gt; Test functions that make API calls to ensure they handle responses correctly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Feel free to share any additional tips or points in the comments section.&lt;/p&gt;

&lt;p&gt;Best of luck with your next website launch!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>websitelaunch</category>
      <category>checklist</category>
    </item>
    <item>
      <title>5 Simple Steps to Enhance SEO in Your React Application</title>
      <dc:creator>Digvijay Jadhav</dc:creator>
      <pubDate>Sun, 26 Feb 2023 06:42:26 +0000</pubDate>
      <link>https://dev.to/digvijayjadhav98/5-simple-steps-to-enhance-seo-in-your-react-application-2jh5</link>
      <guid>https://dev.to/digvijayjadhav98/5-simple-steps-to-enhance-seo-in-your-react-application-2jh5</guid>
      <description>&lt;p&gt;SEO (Search Engine Optimization) is essential for the success of any website. It ensures that your website ranks higher on search engines, resulting in more visitors. This post will walk you through the process of creating SEO in ReactJS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Install React Helmet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;React Helmet is a package that allows you to control your document head using React components. To install React Helmet, open your terminal and type the following command:&lt;br&gt;
&lt;code&gt;yarn add react-helmet&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Import React Helmet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After installation, you need to import React Helmet in your React component. You can do this by adding the following line of code at the top of your file:&lt;br&gt;
&lt;code&gt;import { Helmet } from 'react-helmet';&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Add Meta Tags&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To add meta tags to your React component, you need to use the &lt;code&gt;&amp;lt;Helmet&amp;gt;&lt;/code&gt; component. For example, to add the title tag, you can use the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Helmet&amp;gt;
  &amp;lt;title&amp;gt;{Title of your page}&amp;lt;/title&amp;gt;
&amp;lt;/Helmet&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Similarly, to add meta description tag, you can use the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Helmet&amp;gt;
  &amp;lt;meta name="description" content={Description of your page} /&amp;gt;
&amp;lt;/Helmet&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Add Open Graph Tags&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open Graph tags are used to enhance the appearance of your website when it is shared on social media platforms. To add Open Graph tags, you can use the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Helmet&amp;gt;
  &amp;lt;meta property="og:title" content={Title of your page} /&amp;gt;
  &amp;lt;meta property="og:description" content={Description of your page} /&amp;gt;
  &amp;lt;meta property="og:image" content={URL of the image you want to use} /&amp;gt;
  &amp;lt;meta property="og:url" content={URL of your page} /&amp;gt;
  &amp;lt;meta property="og:type" content="website" /&amp;gt;
&amp;lt;/Helmet&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 5: Add Twitter Tags&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Twitter tags are similar to Open Graph tags, but they are used specifically for Twitter. To add Twitter tags, you can use the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Helmet&amp;gt;
  &amp;lt;meta name="twitter:title" content={Title of your page} /&amp;gt;
  &amp;lt;meta name="twitter:description" content={Description of your page} /&amp;gt;
  &amp;lt;meta name="twitter:image" content={URL of the image you want to use} /&amp;gt;
  &amp;lt;meta name="twitter:card" content="summary_large_image" /&amp;gt;
&amp;lt;/Helmet&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also Consider the following factors before going live:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;XML Sitemaps&lt;/li&gt;
&lt;li&gt;Mobile responsiveness&lt;/li&gt;
&lt;li&gt;SSL certificate&lt;/li&gt;
&lt;li&gt;Semantic HTML&lt;/li&gt;
&lt;li&gt;Image optimization(lazy load, webp format, alt tags)&lt;/li&gt;
&lt;li&gt;Make use of Redux for optimization&lt;/li&gt;
&lt;li&gt;Optimize the robot.txt to help search bots understand how to crawl pages on your website&lt;/li&gt;
&lt;li&gt;Use server side rendering&lt;/li&gt;
&lt;li&gt;Have 404 error page&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By following the steps mentioned above, you can create an SEO-friendly ReactJS website that will rank higher in search results and attract more organic traffic.&lt;br&gt;
Sadly, dealing with React apps adds to the already lengthy list of challenges that a technical SEO must address. Yet, frameworks like as Next.js have made the task of an SEO lot easier than it was previously.&lt;/p&gt;

&lt;p&gt;Feel free to leave a comment below and share your tips for optimizing SEO!!&lt;/p&gt;

</description>
      <category>seo</category>
      <category>react</category>
      <category>javascript</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Code Documentation: A Guide for Beginner's🎯</title>
      <dc:creator>Digvijay Jadhav</dc:creator>
      <pubDate>Mon, 31 Jan 2022 19:27:02 +0000</pubDate>
      <link>https://dev.to/digvijayjadhav98/code-documentation-a-guide-for-beginners-4cj7</link>
      <guid>https://dev.to/digvijayjadhav98/code-documentation-a-guide-for-beginners-4cj7</guid>
      <description>&lt;p&gt;In this blog we’ll be having a quick look into how to document the code. Before we get into how to properly document code, let's first understand Why is it necessary to document your code? &lt;/p&gt;

&lt;p&gt;As we gain more experience in the tech business or software development, we will notice that we spend far more time reading code than developing it. And this may include reading previous versions of your own code, evaluating someone else's documentation in your team, or analyzing code from third-party libraries and their examples.&lt;/p&gt;

&lt;p&gt;As a result, we realize that our code should be more readable and maintainable in order to reduce the time it takes to understand it! We'll look at a few tricks and tips to help you make your code more readable and well-documented.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; &lt;strong&gt;Add comments to your code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The purpose of adding comments to code is to provide an understandable description of what your code is doing.&lt;/p&gt;

&lt;p&gt;When commenting a code, keep the following in mind:&lt;br&gt;
    a. Do not simply restate what the code is doing.&lt;br&gt;
    b. Describe &lt;strong&gt;&lt;em&gt;why&lt;/em&gt;&lt;/strong&gt;. Why is the code doing what it's doing? What's the business assumption or algorithm step?&lt;br&gt;
    c. Format your comments for maximum readability. Tab them properly, leave spaces where necessary&lt;br&gt;
    d. Try making use of tools/extensions of VS code.&lt;br&gt;&lt;br&gt;
few are &lt;a href="https://marketplace.visualstudio.com/items?itemName=sergeb.GhostDoc" rel="noopener noreferrer"&gt;GhostDoc&lt;/a&gt; and &lt;a href="https://marketplace.visualstudio.com/items?itemName=stevencl.addDocComments" rel="noopener noreferrer"&gt;Add JSDoc comments&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I personally prefer Add JSDoc for commenting, it is super easy to use.&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%2Fnhhnkx8dp9g4p23igllk.gif" 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%2Fnhhnkx8dp9g4p23igllk.gif" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check this &lt;a href="http://msdn.microsoft.com/en-us/library/aa164797.aspx" rel="noopener noreferrer"&gt;article&lt;/a&gt; on MSDN about writing effective comments &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Write Test Cases :&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Most of developers write unit tests for their code &lt;strong&gt;to ensure that the code works properly&lt;/strong&gt;. This helps to detect and protect against bugs in the future. &lt;/p&gt;

&lt;p&gt;Essentially test cases provides you an idea of how the code should behave, and we can be confident that this will not cause any problem in production..&lt;/p&gt;

&lt;p&gt;For writing test cases, use language/framework-specific tools/libraries. I prefer &lt;a href="https://jestjs.io" rel="noopener noreferrer"&gt;Jest&lt;/a&gt; for NodeJS and React. It is fast and secure, and it allows for easy mocking and code coverage&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Provide a suitable git commit message.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Proper git commit messages are beneficial in the following ways:&lt;br&gt;
  a. It adds clarity to pull requests (PRs) raised&lt;br&gt;
  b. It is the key to effective debugging within a team&lt;br&gt;
  c. Makes tracking an implementation easier&lt;/p&gt;

&lt;p&gt;There’s a wonderful article about Git commit message&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/chrissiemhrk/git-commit-message-5e21"&gt;How to write a good commit message&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tip : Add task/issue id in your git commit message, this helps in identifying exact feature which was pushed and it becomes easy to trace it.  And git commit messages should be imperative present tense&lt;/p&gt;

&lt;p&gt;eg. #task_id commit_message    #3201 add google login&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Maintain proper Readme file&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Its an documentation with guidelines on how to use a project. Usually it will have instructions on how to install and run the project. An idle readme should have &lt;br&gt;
 a. Project title&lt;br&gt;
 b. Project description&lt;br&gt;
 c. How to install and run the project&lt;br&gt;
 d. Folder structure explanation and challenges&lt;br&gt;
 e. Known issues and credits&lt;br&gt;
 f. License and versioning&lt;/p&gt;

&lt;p&gt;An extension for creating a top-notch Readme file. : &lt;a href="https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced" rel="noopener noreferrer"&gt;Markdown Preview Enhanced&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Write a self documented clean code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There's a reason I saved this for last because I wanted to emphasise it as the most important point of all.&lt;/p&gt;

&lt;p&gt;There are a few things that a developer should always keep in mind when writing production-level code : &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a logical and manageable folder structure(for React refer &lt;a href="https://dev.to/syakirurahman/react-project-structure-best-practices-for-scalable-application-18kk"&gt;React Project Structure Best Practices for Scalable Application&lt;/a&gt; )
&lt;/li&gt;
&lt;li&gt;Following meaningful naming conventions for files, variables and functions throughout project&lt;/li&gt;
&lt;li&gt;Avoiding redundant code : Identify which code is getting repeated and try making it generalized by passing variable arguments&lt;/li&gt;
&lt;li&gt;Commenting : Sometimes devs build a really complex logic and after few months we get to know what we did but hardly able to remember why we did it, so its better if you write some comments whenever it feels necessary.&lt;/li&gt;
&lt;li&gt;Formatting : One of the way to make your code more readable is to format the code, follow  same conventions/intentions throughout project. I use &lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode" rel="noopener noreferrer"&gt;prettier&lt;/a&gt;r extension for formatting. &lt;/li&gt;
&lt;li&gt;Review your code often :If you code for 8-10 hours per day, try devoting 1-2 hours to reviewing it, where you will look for improvements, optimization, working on complexities (time and space), and documenting the code. This will save you a lot of time in the future, and it will help you grow in a lot better ways. Personally, I prefer the afternoon for this.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Refer this &lt;a href="https://www.amazon.in/Clean-Code-Robert-C-Martin/dp/8131773388" rel="noopener noreferrer"&gt;book&lt;/a&gt; for getting better understanding of Clean Code.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;In this section, we looked at how to write a code documentation which will help you make your code more readable and well-documented.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add comments to your code&lt;/li&gt;
&lt;li&gt;Write test cases&lt;/li&gt;
&lt;li&gt;Provide a suitable git commit message.&lt;/li&gt;
&lt;li&gt;Maintain proper Readme file&lt;/li&gt;
&lt;li&gt;Write a self documented clean code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, There are many other ways to document your code, use the one which you think is best! &lt;/p&gt;

&lt;p&gt;If any point is missing over here, do let us know in comment section.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Roadmap for React JS 2024</title>
      <dc:creator>Digvijay Jadhav</dc:creator>
      <pubDate>Tue, 07 Dec 2021 06:31:43 +0000</pubDate>
      <link>https://dev.to/digvijayjadhav98/roadmap-for-react-js-2022-4ccn</link>
      <guid>https://dev.to/digvijayjadhav98/roadmap-for-react-js-2022-4ccn</guid>
      <description>&lt;p&gt;In the previous blog I talked about why one should prefer react for Frontend. (&lt;a href="https://dev.to/digvijayjadhav98/why-choose-react-for-frontend-4m23"&gt;https://dev.to/digvijayjadhav98/why-choose-react-for-frontend-4m23&lt;/a&gt;) Now we'll take a look at React developer roadmap that will guide you through your journey from being a novice developer to a skilled plus experienced developer over time.&lt;/p&gt;

&lt;p&gt;React is one of the most popular JavaScript library for designing rich and interactive User Interfaces.&lt;/p&gt;

&lt;p&gt;Below is the mind-map of learning React. &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%2F3exkakb8xol72rpah4z1.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%2F3exkakb8xol72rpah4z1.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I remember when I started learning React, I was confused how to start and what all things I should know before building some real time projects. After reading few books, referring blogs, online courses videos and two years of experience has made me enough confident about React and what to do and what not to.&lt;/p&gt;

&lt;p&gt;Assuming you have basic understanding of HTML, CSS and JS&lt;/p&gt;

&lt;p&gt;If not then do check out the resources section below. That being said, Lets dive in. &lt;/p&gt;

&lt;p&gt;Lets divide the learning into three sections: Fundamentals, Advance and Ecosystem&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Fundamentals:&lt;/strong&gt; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create React App&lt;/li&gt;
&lt;li&gt;Components : react application is made up of reusable bits of code called components and in react you can create a function component or a class component&lt;/li&gt;
&lt;li&gt;Functional Component &lt;/li&gt;
&lt;li&gt;Class Component &lt;/li&gt;
&lt;li&gt;JSX :  the idea of writing HTML like code inside JavaScript this is what is termed as JSX and is a syntax extension to JavaScript with JSX you pretty much describe what the UI should look like&lt;/li&gt;
&lt;li&gt;Props and State : Props which stands for properties are just arbitrary inputs for a component which play a major part in making the component reusable. However props are read-only the component can never modify its own props this is the point in time where you start learning about state, state allows react components to change their output&lt;/li&gt;
&lt;li&gt;useState and useEffect Hooks&lt;/li&gt;
&lt;li&gt;setState and Component Lifecycle Methods&lt;/li&gt;
&lt;li&gt;Conditional Rendering&lt;/li&gt;
&lt;li&gt;Lists and Keys&lt;/li&gt;
&lt;li&gt;Building Simple forms&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After doing this I recommend you to do a basic mini project. Here are some cool examples &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/thenerdydev/10-react-projects-every-beginner-should-try-fk9"&gt;✨8 React Projects Every Beginner Should Try&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Ecosystem :&lt;/strong&gt; &lt;br&gt;
    React is not framework, its a library which means to complete your web application you need to have a stable ecosystem which covers styling, testing, scalability, performance and application oriented dependencies(eg for language translation one can use i18Net or for Serverless application one can check firebase or AWS lambda)    &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;State Management : Redux / Mobx / Flux / redux-toolkit&lt;/li&gt;
&lt;li&gt;Routing : React Router&lt;/li&gt;
&lt;li&gt;Styling : Styled Components, MaterialUI,Chakra,Tailwind.css, Bootstrap etc&lt;/li&gt;
&lt;li&gt;Forms : Formik,React hook form&lt;/li&gt;
&lt;li&gt;Testing : 

&lt;ol&gt;
&lt;li&gt;Cypress → End to end testing&lt;/li&gt;
&lt;li&gt;Jest → unit Testing&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;Misc:

&lt;ol&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Storybook&lt;/li&gt;
&lt;li&gt;React i18Net&lt;/li&gt;
&lt;li&gt;Firebase&lt;/li&gt;
&lt;li&gt;Practical React libraries &lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;After covering above topics you will be enough confident on React library and ready to build some real time projects. As you move ahead, you should also focus about performance optimization, caching, cookies, security and SEO. This leads to our last point Advance section.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Advance Topics:&lt;/strong&gt; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Isomorphic&lt;/li&gt;
&lt;li&gt;GraphQL&lt;/li&gt;
&lt;li&gt;Higher Order Components&lt;/li&gt;
&lt;li&gt;Render Props&lt;/li&gt;
&lt;li&gt;Refs&lt;/li&gt;
&lt;li&gt;Error boundaries&lt;/li&gt;
&lt;li&gt;Portals&lt;/li&gt;
&lt;li&gt;Http Requests : GET, PUT,POST,DELETE(fetch or axios)&lt;/li&gt;
&lt;li&gt;Caching, Cookies, local and session storage
10.Hooks

&lt;ol&gt;
&lt;li&gt;useContext&lt;/li&gt;
&lt;li&gt;useReducer&lt;/li&gt;
&lt;li&gt;useRef&lt;/li&gt;
&lt;li&gt;useMemo&lt;/li&gt;
&lt;li&gt;useCallBack&lt;/li&gt;
&lt;li&gt;Custome Hooks&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;Learning journey never get to an end. If you have came this far in your react learning then I will recommend you to learn Typescript and move towards Next JS as Next has removed few drawbacks of React and has so many additional functionalities. People also prefer learning React Native so along with Web you will also be able to build Android and IOS applications. &lt;/p&gt;

&lt;p&gt;My intentions were to give an idea on how React looks like from top and what all useful things it contains. Below are some resources which I found most useful while learning ReactJS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;html and css&lt;/strong&gt; : Code with harry : &lt;a href="https://www.youtube.com/watch?v=GeykycZ4Ixs" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=GeykycZ4Ixs&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Book&lt;/strong&gt;: &lt;a href="https://www.amazon.in/HTML-CSS-Design-Build-Websites/dp/1118008189" rel="noopener noreferrer"&gt;https://www.amazon.in/HTML-CSS-Design-Build-Websites/dp/1118008189&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JS required for React JS&lt;/strong&gt; : &lt;a href="https://www.youtube.com/watch?v=XevQlT444qg" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=XevQlT444qg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plain JS&lt;/strong&gt; : &lt;a href="https://www.youtube.com/watch?v=W6NZfCO5SIk" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=W6NZfCO5SIk&lt;/a&gt;&lt;br&gt;
JS ES6 : &lt;a href="https://www.youtube.com/watch?v=NCwa_xi0Uuc" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=NCwa_xi0Uuc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;React JS:&lt;/strong&gt; &lt;br&gt;
playlist :Code evolution :  &lt;a href="https://www.youtube.com/watch?v=QFaFIcGhPoM&amp;amp;list=PLC3y8-rFHvwgg3vaYJgHGnModB54rxOk3" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=QFaFIcGhPoM&amp;amp;list=PLC3y8-rFHvwgg3vaYJgHGnModB54rxOk3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mosh : &lt;a href="https://www.youtube.com/watch?v=Ke90Tje7VS0&amp;amp;t=813s" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=Ke90Tje7VS0&amp;amp;t=813s&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Tip: *&lt;/em&gt;&lt;em&gt;Try making notes on Notion or some other notes making application. Try adding code snippets along with textual information. This will not only help you remember after long time but also you don't have to visit google every time, you can refer your notes.&lt;/em&gt;&lt;/p&gt;


&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why choose React for frontend?</title>
      <dc:creator>Digvijay Jadhav</dc:creator>
      <pubDate>Sat, 23 Oct 2021 12:05:25 +0000</pubDate>
      <link>https://dev.to/digvijayjadhav98/why-choose-react-for-frontend-4m23</link>
      <guid>https://dev.to/digvijayjadhav98/why-choose-react-for-frontend-4m23</guid>
      <description>&lt;p&gt;Before I dive into some of the cool things you can do with React, lets understand what is React. &lt;br&gt;
React JS is basically a JavaScript library built and maintained by Facebook. React is an efficient, declarative, and flexible open-source JavaScript library for building simple, fast, and scalable frontends of web applications.&lt;/p&gt;

&lt;p&gt;Language used to build React applications is JSX. JSX is basic JavaScript that facilitates HTML quoting and uses the syntax of this HTML tag to make subcomponents&lt;/p&gt;

&lt;p&gt;ReactJS is a stronger framework because of its ability to break down the complex interface and allow users to work on individual components. &lt;/p&gt;

&lt;p&gt;ReactJS comes with the core objective is to deliver the best rendering performance possible. Its strength stems from the emphasis on individual parts. ReactJS helps a developer to break down the complicated UI into smaller components, rather than operating on the entire web framework&lt;/p&gt;

&lt;h2&gt;
  
  
  Key benefits of ReactJS for front-end development
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Easy to Learn &amp;amp; Easy to Use&lt;/strong&gt; : React, compared to other popular frontend frameworks like &lt;a href="https://www.peerbits.com/hire-angularjs-developers.html"&gt;Angular&lt;/a&gt; &amp;amp; &lt;a href="https://www.peerbits.com/hire-vuejs-developers.html"&gt;Vue&lt;/a&gt;, is much easier to learn. In fact, it’s one of the main reasons why React gained so much traction in little time. It helps businesses quickly build their projects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Helps to build rich user interfaces&lt;/strong&gt; : React supports frontend libraries such as Bootstrap, Material ui, Chakra, Tailwind etc to build rich UI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Offers fast rendering&lt;/strong&gt; : the DOM model is tree-structured. So, a minor modification at a higher level layer can awfully impact the user interface of an application. To solve this, Facebook has introduced a virtual DOM feature. Virtual DOM is the virtual representation of DOM that allows testing all changes to the virtual DOM first to calculate risks with each modification.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Strong community support&lt;/strong&gt; :  Currently, React JS has attained [136,079 stars on Github] and 1,331 regular contributors. Not only that, but experts are also regularly uploading free React tutorials on Youtube and writing in-depth React tutorial articles &amp;amp; blogs on the internet. For instance, a simple “free React tutorial” search on Google gives 13,00,00,000 results. The latest survey by Stack Overflow also revealed that React is the most loved web framework, while Angular ranked 9th on the same list.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reusable elements :&lt;/strong&gt; Technology used to be far more complicated than that, but ReactJS provides us with the ability to do just the same. Each React project is constructed using the so-called reusable elements. This means that by calling from other components, each element of the interface that you have already built can be used anywhere in your project.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Currently React is used by many fortune 500 companies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Airbnb, Tesla, Tencent QQ, and Walmart are among the top brands that built their mobile apps using the React Native framework.&lt;/p&gt;

&lt;p&gt;React web framework, on the other hand, is currently being utilized by famous companies including Netflix, Paypal, NASA, BBC, Lyft, and New York Times to name just a few.&lt;/p&gt;

&lt;p&gt;React Js inherits React Native which allows us to use the native look and feel to develop any mobile application(Android &amp;amp; IOS).&lt;/p&gt;

&lt;p&gt;Like any other technology, React also has its flaws. The good news is that the number of them decreases month by month, year by year, and those left behind are acceptable in many cases.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Incompleteness : It is not a framework and hence demands other libraries to be included, which may include learning curve as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The high pace of development : Everything is evolving, and some developers are not comfortable with keeping up with such a pace. At the same time, we should admit that React’s core API has become more stable and rarely changeable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lack of proper documentation : he problem with documentation traces back to constant releases of new tools. Different and new libraries like Redux and Reflux are promising to accelerate the work of a library or improve the entire React ecosystem.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Along with React we also have Angular2, Vue.js, Ember.js,Vanilla js, etc according to business requirements one can use suitable frontend framework. &lt;/p&gt;

&lt;p&gt;Tell us below comment section which frontend framework do you use?&lt;/p&gt;

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