<?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: Sergio Holgado</title>
    <description>The latest articles on Forem by Sergio Holgado (@sergioholgado).</description>
    <link>https://forem.com/sergioholgado</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%2F497666%2Fe6c314f6-fc07-4590-af9a-54d1c4a81f82.png</url>
      <title>Forem: Sergio Holgado</title>
      <link>https://forem.com/sergioholgado</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sergioholgado"/>
    <language>en</language>
    <item>
      <title>PNPM Package Manager: What is it and Why You Should Be Using it  - A Comprehensive Guide</title>
      <dc:creator>Sergio Holgado</dc:creator>
      <pubDate>Sun, 30 Jul 2023 11:09:56 +0000</pubDate>
      <link>https://forem.com/sergioholgado/pnmp-package-manager-what-is-it-and-why-you-should-be-using-it-a-comprehensive-guide-4c66</link>
      <guid>https://forem.com/sergioholgado/pnmp-package-manager-what-is-it-and-why-you-should-be-using-it-a-comprehensive-guide-4c66</guid>
      <description>&lt;p&gt;Everything about the new Fast, disk space efficient package manager that's taking over npm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;· PNPM: The New npm Challenger:&lt;/strong&gt; Discover the rise of PNPM and why it's taking the development world by storm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;· Inside PNPM's Magic:&lt;/strong&gt; Unravel the inner workings of PNPM and its unique approach to package management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;· Getting Started with PNPM:&lt;/strong&gt; Step-by-step guide to effortlessly integrate PNPM into your projects with easy installation and setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;· Mastering PNPM CLI:&lt;/strong&gt; Learn essential CLI commands, configuration, and shortcuts to enhance your development workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  PNPM: The New NPM and Yarn Challenger
&lt;/h2&gt;

&lt;p&gt;npm (Node Package Manager) has long been the industry standard, but a new contender has emerged: pnpm (Pinned Node Package Manager). Offering enhanced speed, resource efficiency, insightful logs and is 3 times more efficient, pnpm is positioning itself as a viable alternative to npm, showcasing why npm may be falling behind.&lt;/p&gt;

&lt;p&gt;When comparing PNPM and Yarn, it becomes evident that PNPM outperforms Yarn in terms of speed, regardless of cache type (cold or hot). The key to PNPM's speed lies in its file linking approach, where it simply links files from the global store, while Yarn adopts a file copying method from its cache. Additionally, PNPM ensures efficient disk usage by never saving package versions more than once on a disk.&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%2F66abw3ta4892swyz77lk.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%2F66abw3ta4892swyz77lk.png" alt="Source:pixelmatters"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clean install: installed for the first time with no cache on the system;&lt;/li&gt;
&lt;li&gt;re-install: install after the first install;&lt;/li&gt;
&lt;li&gt;with cache and lockfile: remove node_modules and run install;&lt;/li&gt;
&lt;li&gt;with cache: remove node_modules, lock file, and run install;&lt;/li&gt;
&lt;li&gt;with lockfile: remove node_modules and cache, and run install;&lt;/li&gt;
&lt;li&gt;with cache and node_modules: only remove lockfile and install gain;&lt;/li&gt;
&lt;li&gt;with node_modules and lockfile: remove cache and run install again;&lt;/li&gt;
&lt;li&gt;with node_modules: remove cache and lockfile, and install again.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Downsides of using PNPM
&lt;/h3&gt;

&lt;p&gt;Due to its flat tree structure, pnpm does not support the lock files produced by NPM. &lt;a href="https://pnpm.io/cli/import" rel="noopener noreferrer"&gt;However, there exists a convenient command that enables the conversion of NPM/Yarn lock files into a pnpm-compatible format.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's important to note that pnpm cannot publish packages with bundledDependencies. However, it is worth mentioning that even on NPM, using bundledDependencies is not a recommended practice. Instead, the preferred approach is to employ a package bundler, such as webpack, rollup, or ESBuild, to handle the bundling process effectively. This ensures a more efficient and manageable packaging of dependencies for the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inside PNPM's Magic:
&lt;/h2&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%2Fp6ioeo56b50zrj31xsvu.jpg" 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%2Fp6ioeo56b50zrj31xsvu.jpg" alt="Symbolic Structure"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When utilizing npm, having 100 projects with the same dependency would lead to 100 separate copies of that dependency being saved on the disk. However, pnpm adopts a smarter approach by storing dependencies in a content-addressable store, resulting in the following benefits:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Efficient Storage Utilization:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When depending on different versions of the same dependency, pnpm optimizes disk usage by only adding the files that differ to the store. Suppose a dependency contains 100 files, and a new version introduces changes in just one file. In that case, running "pnpm update" will only add the modified file to the store instead of cloning the entire dependency, substantially reducing storage overhead.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Centralized File Storage:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of using the flatten tree structure PNPM uses a symbolic link structure, this approach results in all dependency files being consolidated into a single location on the disk. During the installation process, pnpm creates hard links from this central repository to each project, eliminating the need for redundant copies. This innovative approach allows different projects to share dependencies of the same version, saving considerable disk space.&lt;/p&gt;

&lt;p&gt;The cumulative result of these optimizations is a significant reduction in disk space consumption, directly proportional to the number of projects and their associated dependencies. Additionally, pnpm achieves faster installations due to its streamlined approach, making it a highly efficient package manager choice for developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with PNPM:
&lt;/h2&gt;

&lt;p&gt;Installation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing with Windows Powershell:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;iwr https://get.pnpm.io/install.ps1 -useb | iex&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing with NPM&lt;/strong&gt;&lt;br&gt;
· Node.js already installed:&lt;br&gt;
&lt;code&gt;npm install -g pnpm&lt;/code&gt;&lt;br&gt;
· Node.js not installed (included in package as exe)&lt;br&gt;
&lt;code&gt;npm install -g @pnpm/exe&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install with Chocolatey&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;choco install pnpm&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pnpm install&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pnpm install command is used to install project dependencies. It creates a non-flat node_modules structure in a content-addressable store, optimizing storage and providing faster installations. It also supports multi-package installations in a repository.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pnpm install&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pnpm add&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pnpm add command allows you to add new dependencies to your project. It automatically updates the package.json file and installs the new package.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pnpm add&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pnpm update&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pnpm update command helps update dependencies to their latest versions. It efficiently updates only the changed files in the content-addressable store, reducing the disk space required.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pnpm update&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pnpm remove&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To remove dependencies from the project, you can use the pnpm remove command. It removes the specified packages and updates the package.json file accordingly.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pnpm remove&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;· &lt;strong&gt;pnpm list&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The pnpm list command displays a tree-like view of the project's dependencies. It shows all installed packages and their respective versions.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pnpm list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;· &lt;strong&gt;pnpm store status&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The pnpm store status command provides an overview of the content-addressable store's status, displaying its size and the number of packages stored.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pnpm store status&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;· &lt;strong&gt;pnpm store prune&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To optimize disk space usage, you can use the pnpm store prune command. It removes unreferenced packages from the store.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pnmp store prune&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;· &lt;strong&gt;pnpm publish&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The pnpm publish command enables developers to publish their packages to registries and share them with the community. When you publish a package using PNPM, it employs the content-addressable store to optimize the publishing process.&lt;br&gt;
Instead of duplicating package files for each version, PNPM links common files from the store, drastically reducing the size of the published package. This intelligent approach leads to faster publishing times and more efficient storage usage on the registry, contributing to a better overall developer experience.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pnpm publish&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  PNPM Workspaces
&lt;/h3&gt;

&lt;p&gt;PNPM's Workspaces feature allows developers to manage multiple packages within a monorepository with remarkable ease. By defining a single package.json file at the root of the repository and specifying the individual packages as workspaces, PNPM treats them as interdependent projects.&lt;br&gt;
When you run pnpm installat the root of the repository, PNPM installs dependencies for all workspaces, ensuring consistency across the entire project. This centralized approach streamlines development, facilitates code sharing, and simplifies the maintenance of complex projects.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-monorepo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"private"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"workspaces"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="s2"&gt;"packages/*"&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


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

&lt;/div&gt;

</description>
      <category>webdev</category>
      <category>node</category>
      <category>npm</category>
      <category>coding</category>
    </item>
    <item>
      <title>Rix.chat: The Ultimate AI Coding Assistant</title>
      <dc:creator>Sergio Holgado</dc:creator>
      <pubDate>Wed, 05 Jul 2023 07:17:13 +0000</pubDate>
      <link>https://forem.com/sergioholgado/rixchat-the-ultimate-ai-coding-assistant-64l</link>
      <guid>https://forem.com/sergioholgado/rixchat-the-ultimate-ai-coding-assistant-64l</guid>
      <description>&lt;p&gt;Rix Chat is an exceptional AI-powered search and coding assistant created exclusively for developers. With its versatility and user-friendly interface, Rix Chat is designed to enhance your coding experience. Best of all, Rix Chat is completely free, providing you with invaluable support and assistance throughout your development journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PU-i-JWQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/46nc5k9w5xigzfwhzffy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PU-i-JWQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/46nc5k9w5xigzfwhzffy.png" alt="Rix.chat prompt" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To get started go to Rix.chat and sign in, then go to the search bar, there are three search modes: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Web Search: Browses the internet and returns a detailed response quoting the websites where it has extracted the information from, useful when looking for a short explanation  about a very complex topic along side the code&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quick reply: retrieves information from previous answers he's given other users for the same prompt&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code Writing: Writes code along side by a step by step explanation of what the code does.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why use Rix.chat intead of ChatGPT
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Rix.Chat is trained on a large dataset of code-related content, including programming languages, frameworks, and libraries. This specialized training enables it to have a deeper understanding of code syntax, structure, and common coding patterns. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It can provide more accurate and contextually relevant code suggestions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rix.Chat's training includes knowledge about coding best practices and common programming pitfalls helping you write cleaner and more efficient code. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ChatGPT writes code that is not necessarily efficient or error free since it's a more general purpose AI.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to write prompts effectively
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rEOF3iAd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/voez5yvg70gn6gw18hx5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rEOF3iAd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/voez5yvg70gn6gw18hx5.png" alt="Rix chat Arduino prompt" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Specify the Task or Objective:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start by clearly stating the task or objective you want assistance with. For example, "Write a Python function to calculate the factorial of a number."&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provide Context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give any necessary context or constraints related to the task. For example, "The function should handle positive integers and return the factorial value."&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ask Direct Questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pose direct questions to prompt specific responses. For example, "What is the syntax to open a file in Python?" or "How can I sort an array in descending order using JavaScript?"&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use Placeholder Values:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you need to reference specific values or variables in your prompt, use placeholders. For example, "Calculate the sum of {num1} and {num2}."&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Be Specific:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Be as specific as possible when asking for code examples or explanations. Specify the programming language, relevant libraries or frameworks, and any specific requirements.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Break Down Complex Tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the task is complex or multi-step, break it down into smaller sub-tasks. Ask for guidance or code suggestions for each sub-task to make the problem more manageable.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use each search mode accordingly &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose between Search mode or code writing mode depending on your knowledge and the complexity of the code.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;To stay updated with the latest developments in coding, AI, and technology, follow me for more articles, tutorials, and insights. &lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>coding</category>
    </item>
    <item>
      <title>How to fetch data before rendering in React JS</title>
      <dc:creator>Sergio Holgado</dc:creator>
      <pubDate>Sun, 02 Jul 2023 15:38:35 +0000</pubDate>
      <link>https://forem.com/sergioholgado/how-to-fetch-data-before-rendering-in-react-js-3750</link>
      <guid>https://forem.com/sergioholgado/how-to-fetch-data-before-rendering-in-react-js-3750</guid>
      <description>&lt;p&gt;In React.js, you can fetch data before mounting and components using various techniques, in order to display components require the fetched data before being displayed, the data must be fetched before mount, mounting means putting elements into the DOM. React has four built-in methods that gets called, in this order, when mounting a component: constructor() getDerivedStateFromProps() render().&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%2Fi0.wp.com%2Freactjsguru.com%2Fwp-content%2Fuploads%2F2022%2F06%2FScreenshot-360.webp%3Fw%3D1440%26ssl%3D1" 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%2Fi0.wp.com%2Freactjsguru.com%2Fwp-content%2Fuploads%2F2022%2F06%2FScreenshot-360.webp%3Fw%3D1440%26ssl%3D1" alt="React lifecycle" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are a few common approaches depending on whether your react app is class based or functional:&lt;/p&gt;

&lt;h2&gt;
  
  
  Functional Components App
&lt;/h2&gt;

&lt;p&gt;A functional component in a React app is a JavaScript function that returns JSX (JavaScript XML) to define the structure and behavior of a user interface element. It is a simpler and more lightweight alternative to class components. Functional components allow you to write reusable and stateless code by using hooks like useState and useEffect to manage component state and lifecycle effects. They are widely used in modern React development due to their simplicity and readability.&lt;/p&gt;

&lt;p&gt;If your app is functional components based, use the &lt;code&gt;useEffect&lt;/code&gt; hook, and fetch your data within the hook which is executed, before mount.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;MyComponent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setData&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-api-endpoint&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="nf"&gt;setData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error fetching data:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="c1"&gt;// Render the component using the fetched data&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* Render your component with the fetched data */&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  Class-Based React App
&lt;/h2&gt;

&lt;p&gt;For class components, you can also use async/await inside the componentDidMount method to fetch data, but it won't fetch the data before rendering, instead it will trigger a re-render, note that the method componentWillMount has been deprecated. the only way to fetch data before rendering is using the useEffect hook. Nevertheless using componentDidMount can be ideal for certain cases.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyComponent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;componentDidMount&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;fetchData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com/data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jsonData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;jsonData&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error fetching data:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* Render your component using the fetched data */&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;MyComponent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


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

&lt;/div&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>api</category>
      <category>webdev</category>
    </item>
    <item>
      <title>WEb3form how to avoid exposing your api key</title>
      <dc:creator>Sergio Holgado</dc:creator>
      <pubDate>Thu, 29 Jun 2023 09:57:25 +0000</pubDate>
      <link>https://forem.com/sergioholgado/web3form-how-to-avoid-exposing-your-api-key-ia7</link>
      <guid>https://forem.com/sergioholgado/web3form-how-to-avoid-exposing-your-api-key-ia7</guid>
      <description>&lt;p&gt;Web3form API keys are being exposed in html files, since any user can inspect the page and copy it, to prevent this create a process.env file and store you API key there&lt;/p&gt;

&lt;p&gt;&lt;code&gt;WEBFORM = your-api-key&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then we'll import it into the html file by adding an id to the &lt;br&gt;
access key input as follows&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;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;title&amp;gt;Contact us&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;form action="https://api.web3forms.com/submit" method="POST"&amp;gt;
&amp;lt;input type="hidden" name="access_key" id="key" &amp;gt;
        &amp;lt;input type="text" name="name" required&amp;gt;
        &amp;lt;input type="email" name="email" required&amp;gt;
        &amp;lt;textarea name="message" required&amp;gt;&amp;lt;/textarea&amp;gt;
        &amp;lt;div class="h-captcha" data-captcha="true"&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;button type="submit"&amp;gt;Submit Form&amp;lt;/button&amp;gt;
    &amp;lt;/form&amp;gt;
    &amp;lt;script src="https://web3forms.com/client/script.js" async defer&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we'll access the value attribute through Javascript and link it to the env variable&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;document.getElementById('key').value = process.env.WEBFORM; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will prevent users from inspecting the page and stealing your API key since the env file is not accesible.&lt;/p&gt;

&lt;p&gt;If you are contributing to a Github repo or NPM make sure to add the process.env file to your gitignore file or npmignore respectively&lt;/p&gt;

</description>
      <category>astro</category>
      <category>webdev</category>
      <category>security</category>
      <category>api</category>
    </item>
    <item>
      <title>3 Foolproof Strategies for Staying Organized in Code</title>
      <dc:creator>Sergio Holgado</dc:creator>
      <pubDate>Sun, 25 Jun 2023 16:32:32 +0000</pubDate>
      <link>https://forem.com/sergioholgado/3-foolproof-strategies-for-staying-organized-in-code-3jaa</link>
      <guid>https://forem.com/sergioholgado/3-foolproof-strategies-for-staying-organized-in-code-3jaa</guid>
      <description>&lt;p&gt;I'm not the most organized programmer, for instance my first projects used to be a complete mess, no folders, no project log, no README file. Being disorganize doesn't just make it harder for others to read your code but for you too, and it's slowing you down.&lt;br&gt;
In this Post I'll talk about 5 good strategies to keep your code organized and clean.&lt;/p&gt;

&lt;h2&gt;
  
  
  Log files
&lt;/h2&gt;

&lt;p&gt;A markdown log file is a file where you write down what you've done, what to fix and what to do, this lets you track your productivity, solve bugs more easily, don't forget any unfixed bugs or vulnerabilities, and avoid that feeling of not knowing where to start at the beginning of every code session.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Programming Log&lt;br&gt;
[Date]&lt;br&gt;
Project Update&lt;br&gt;
 Added new feature XYZ.&lt;br&gt;
 Refactored code in module ABC.&lt;br&gt;
 Fixed bug in function DEF.&lt;br&gt;
 Tested and verified compatibility with Python 3.9.&lt;br&gt;
Code Changes&lt;br&gt;
 Updated main.py to improve performance.&lt;br&gt;
 Added new helper functions in utils.py.&lt;br&gt;
 Removed unused imports in module.py.&lt;br&gt;
Bug Fixes&lt;br&gt;
 Resolved issue #123: Null pointer exception in process_data() function.&lt;br&gt;
 Fixed memory leak in calculate() method.&lt;br&gt;
Next Steps&lt;br&gt;
 Implement error handling for user inputs.&lt;br&gt;
 Write unit tests for critical functions.&lt;br&gt;
 Improve documentation for module interfaces.&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Folders
&lt;/h2&gt;

&lt;p&gt;When working with several documents, specially in frameworks separate images(assets), screens, databases, config files... in different folders.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9JkwEuES--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9m7l8oeas69divxzinny.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9JkwEuES--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9m7l8oeas69divxzinny.png" alt="Image description" width="211" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Comment code as though another person were to read it
&lt;/h2&gt;

&lt;p&gt;Proper commenting is essential in programming as it improves code readability, maintainability, and collaboration among developers. Here are some guidelines on how to comment properly:&lt;/p&gt;

&lt;p&gt;Commenting Individual Code Lines: Inline comments should be used to clarify complex logic, explain the reasoning behind specific code decisions, or highlight important details. Place them on the same line or a line above the code they refer to. Inline comments should be concise and provide valuable insights, avoiding unnecessary redundancy with the code itself.&lt;/p&gt;

&lt;p&gt;Documentation comments: Some languages, such as Python, support specific comment formats for generating documentation. For example, Python uses triple quotes (''' ''') for docstrings that can be automatically extracted to create documentation.&lt;/p&gt;

&lt;p&gt;Commenting Blocks of Code: When commenting a block of code, such as a function or a complex algorithm, use a multi-line comment to provide an overview of its purpose, inputs, outputs, and any other relevant information. This helps other developers understand the functionality without delving into the implementation details immediately.&lt;/p&gt;

&lt;p&gt;Update and Maintain Comments: Regularly review and update comments as the code evolves. Outdated comments can mislead other developers and introduce confusion. When making changes to the code, ensure that corresponding comments are also modified or removed if they become irrelevant.&lt;/p&gt;

&lt;p&gt;Comment for Future Maintenance: Consider the future maintenance of your codebase when commenting. Explain any potential pitfalls, assumptions, or edge cases that might arise and how to handle them. This can save time and effort for developers who work on the code later.&lt;/p&gt;

&lt;p&gt;Avoid Redundant Comments: Ensure that your comments add value and don't merely repeat what the code already expresses. Avoid excessive commenting on obvious or self-explanatory code. Focus on explaining the intent, rationale, or non-obvious aspects of the code.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>cleancode</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>7 React native libraries and packages for UI design</title>
      <dc:creator>Sergio Holgado</dc:creator>
      <pubDate>Thu, 02 Mar 2023 18:45:45 +0000</pubDate>
      <link>https://forem.com/sergioholgado/7-react-native-libraries-and-packages-for-ui-design-59j0</link>
      <guid>https://forem.com/sergioholgado/7-react-native-libraries-and-packages-for-ui-design-59j0</guid>
      <description>&lt;p&gt;React Native is a popular framework for building mobile applications that allows developers to use JavaScript to create native mobile applications for iOS and Android. One of the key benefits of React Native is its flexibility, which allows developers to use a wide range of libraries and packages to enhance the user interface and user experience of their applications. In this article, we will discuss seven React Native libraries and packages that can help developers create great user interfaces and user experiences.&lt;/p&gt;

&lt;h2&gt;
  
  
  React Native Elements
&lt;/h2&gt;

&lt;p&gt;React Native Elements is a popular UI library that provides a set of cross-platform UI components that are easy to use and customize. It includes buttons, forms, input fields, badges, and more, and comes with a wide range of customizable options. React Native Elements also supports theming, allowing developers to easily change the look and feel of their application.&lt;/p&gt;

&lt;h2&gt;
  
  
  React Native Paper
&lt;/h2&gt;

&lt;p&gt;React Native Paper is another popular UI library that provides a set of Material Design components for React Native. It includes buttons, cards, dialogs, progress indicators, and more, and is designed to be easy to use and customize. React Native Paper also supports theming, and provides a set of pre-built themes that can be used out of the box.&lt;/p&gt;

&lt;h2&gt;
  
  
  React Native Vector Icons
&lt;/h2&gt;

&lt;p&gt;React Native Vector Icons is a library that provides a set of vector icons for React Native applications. It includes icons from popular icon packs like Font Awesome, Material Icons, and Ionicons, and allows developers to easily add icons to their application. React Native Vector Icons supports customization, allowing developers to change the color, size, and style of the icons.&lt;/p&gt;

&lt;h2&gt;
  
  
  React Native Animatable
&lt;/h2&gt;

&lt;p&gt;React Native Animatable is a library that provides a set of pre-built animations that can be easily added to React Native components. It includes animations like &lt;strong&gt;fadeIn, slideInUp, zoomIn&lt;/strong&gt; and more, and allows developers to create custom animations as well. React Native Animatable is designed to be easy to use and customize, and can help developers add a touch of interactivity and dynamism to their applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  React Native Modal
&lt;/h2&gt;

&lt;p&gt;React Native Modal is a package that provides a modal component for React Native applications. It allows developers to display content on top of the application's main view, and supports animations and custom styling. React Native Modal can be used to display popups, alerts, and other modal content, and is a useful tool for creating a seamless user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  React Native Gesture Handler
&lt;/h2&gt;

&lt;p&gt;React Native Gesture Handler is a library that provides a set of gesture recognizers for React Native applications. It includes recognizers for taps, swipes, pinches, and more, and allows developers to create custom gestures as well. React Native Gesture Handler can be used to create touch-based interactions in React Native applications, and is a useful tool for enhancing the user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  React Native Reanimated
&lt;/h2&gt;

&lt;p&gt;React Native Reanimated is a library that provides a set of tools for creating complex animations and interactions in React Native applications. It includes a powerful animation engine, a declarative API, and support for gesture handlers. React Native Reanimated can be used to create highly performant and customizable animations and interactions, and is a valuable tool for creating immersive user experiences.&lt;/p&gt;

&lt;p&gt;In conclusion, React Native provides developers with a wide range of libraries and packages that can be used to create great user interfaces and user experiences. The seven libraries and packages discussed in this article provide a solid foundation for creating mobile applications that are intuitive, engaging, and visually appealing. By using these tools, developers can create applications that stand out in a crowded marketplace and provide a superior user experience for their customers.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>design</category>
    </item>
  </channel>
</rss>
