<?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: Sumrit Grover</title>
    <description>The latest articles on DEV Community by Sumrit Grover (@grover_sumrit).</description>
    <link>https://dev.to/grover_sumrit</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%2F757078%2Fcc46abb1-0bda-4fb3-912e-8a7401a319bf.jpg</url>
      <title>DEV Community: Sumrit Grover</title>
      <link>https://dev.to/grover_sumrit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/grover_sumrit"/>
    <language>en</language>
    <item>
      <title>Building a Successful Career: Key Insights for Junior Developers</title>
      <dc:creator>Sumrit Grover</dc:creator>
      <pubDate>Thu, 04 Jul 2024 06:30:00 +0000</pubDate>
      <link>https://dev.to/grover_sumrit/building-a-successful-career-key-insights-for-junior-developers-2c1a</link>
      <guid>https://dev.to/grover_sumrit/building-a-successful-career-key-insights-for-junior-developers-2c1a</guid>
      <description>&lt;p&gt;Sarah had just landed her dream job as a junior developer at a promising startup. Excited and eager to prove herself, she dove headfirst into her first project. However, as weeks went by, she found herself struggling with feedback from her team lead, feeling overwhelmed by the constant need to learn new technologies, and battling fatigue from long coding sessions. Sarah's experience is not unique – many junior developers face similar challenges as they navigate the early stages of their careers.&lt;/p&gt;

&lt;p&gt;In this blog post, we'll explore five common mistakes that junior developers often make and provide insights on how to avoid them. By understanding these pitfalls, you can set yourself up for success and grow into a more confident and skilled developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ignoring Feedback
&lt;/h2&gt;

&lt;p&gt;One of the most crucial aspects of personal and professional growth is the ability to receive and act upon feedback. As a junior developer, you'll receive feedback in various formats – code reviews, meetings, one-on-one sessions, and more. However, a common mistake is to ignore this feedback or take it too personally.&lt;/p&gt;

&lt;p&gt;It's essential to understand that feedback is not a personal attack but a valuable tool for improvement. The person providing feedback is often more experienced and has insights that can help you grow. When receiving feedback, try to set aside your ego and approach it with an open mind. Take notes during meetings to better understand your shortcomings and areas for improvement.&lt;/p&gt;

&lt;p&gt;Many junior developers fall into the trap of taking feedback personally, feeling as if others are pointing out their faults to make them feel bad. This attitude is often driven by ego or a know-it-all mentality. Such developers may fall into the 'Low Competence-High Confidence' category of the Dunning-Kruger effect, where they overestimate their abilities.&lt;/p&gt;

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

&lt;p&gt;To avoid this mistake, cultivate a growth mindset. Embrace feedback as an opportunity to learn and improve. Remember that even the most senior developers continue to receive and act upon feedback throughout their careers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Neglecting Career Development
&lt;/h2&gt;

&lt;p&gt;In the daily grind of your job, it's easy to neglect the importance of continuous learning and upskilling. Many junior developers find themselves so focused on their immediate tasks that they lose sight of the bigger picture – their long-term career development.&lt;/p&gt;

&lt;p&gt;Keeping yourself up-to-date is crucial for your career growth. The tech industry evolves rapidly, and staying current with new technologies, methodologies, and best practices is essential. However, many junior developers feel they hardly have time to enhance their knowledge beyond their immediate work.&lt;/p&gt;

&lt;p&gt;To avoid this mistake, make a conscious effort to dedicate time to your professional development. There are many simple ways to continuously enhance your knowledge. Reading books and articles, listening to podcasts, and watching webinars can broaden your understanding of various topics. These activities don't require extensive planning and can be done during breaks or while commuting.&lt;/p&gt;

&lt;p&gt;Don't overlook the value of coding challenges and virtual conferences. Participating in these activities can be both fun and educational, while also providing networking opportunities. Remember, investing in your skills and knowledge is investing in your future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rushing into Coding Without Analysis
&lt;/h2&gt;

&lt;p&gt;A common pitfall for junior developers is the tendency to start coding as soon as they're assigned a task, without spending adequate time analyzing the problem at hand. This eagerness to dive into code can lead to misunderstandings, inefficient solutions, and potential rework.&lt;/p&gt;

&lt;p&gt;To avoid this mistake, make it a habit to thoroughly analyze the requirements before writing a single line of code. Start by making a list of assumptions and validating them with your product managers or whoever assigned the task. This step ensures that you have a clear understanding of the problem you're trying to solve.&lt;/p&gt;

&lt;p&gt;Additionally, take the time to understand the non-functional aspects of the task. Consider questions like: How many transactions per second should the feature handle? Are there any specific performance requirements? Once you have a comprehensive understanding of the task, write down all the requirements and create a checklist of what needs to be done before the task is ready for testing.&lt;/p&gt;

&lt;p&gt;By taking this analytical approach, you'll be better prepared to write efficient, effective code that meets all the necessary requirements. This method may seem time-consuming at first, but it will save you time and effort in the long run by reducing errors and rework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Risking Burnout
&lt;/h2&gt;

&lt;p&gt;For many junior developers, coding can become an addiction. When faced with an exciting problem, you might find yourself glued to your desk, determined not to leave until you've solved it. While this dedication is admirable, it can be detrimental to your health and long-term productivity.&lt;/p&gt;

&lt;p&gt;Burnout is a real risk in the tech industry, and its effects can be severe. Once you experience burnout, your motivation levels can plummet, making it difficult to focus on your work. To avoid this, it's crucial to maintain a healthy work-life balance and take regular breaks.&lt;/p&gt;

&lt;p&gt;Implement a method that works for you, such as the Pomodoro Technique, where you work for focused intervals followed by short breaks. Set reminders to ensure you step away from your desk regularly. Don't be afraid to take extended leaves when needed – many developers worry about missing out, but taking time to recharge is essential for your long-term success and well-being.&lt;/p&gt;

&lt;p&gt;Remember, sustainable productivity is more valuable than short bursts of intense work followed by periods of burnout. By taking care of your mental and physical health, you'll be able to maintain your passion for coding and perform at your best in the long run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Misunderstanding Self-Worth
&lt;/h2&gt;

&lt;p&gt;Whether you're fresh out of college or a seasoned developer, understanding your self-worth is crucial. Many junior developers either overestimate or underestimate their capabilities, and neither extreme is beneficial for your career growth.&lt;/p&gt;

&lt;p&gt;Developers who overestimate their abilities often have unrealistic expectations from their first job. They may feel they're doing the company a favor by working there, which can negatively impact their performance in interviews and their work attitude. On the other hand, those who underestimate their abilities might accept the first offer they receive without negotiating or considering if it aligns with market standards. They may also hesitate to ask about the nature of the work or whether the company culture is a good fit for them.&lt;/p&gt;

&lt;p&gt;To avoid this mistake, strive for a balanced understanding of your skills and worth. Research industry standards for your position and location. Use resources like Glassdoor or AmbitionBox to learn about company cultures and employee experiences. Don't be afraid to ask questions during interviews about the work you'll be doing and the growth opportunities available.&lt;/p&gt;

&lt;p&gt;Remember, knowing your worth doesn't mean being arrogant or inflexible. It means having a realistic understanding of your skills, being open to growth, and seeking opportunities that align with your career goals and values.&lt;/p&gt;




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

&lt;p&gt;As a junior developer, navigating the early stages of your career can be challenging. By being aware of these common mistakes – ignoring feedback, neglecting career development, rushing into coding without analysis, risking burnout, and misunderstanding self-worth – you can take proactive steps to avoid them.&lt;/p&gt;

&lt;p&gt;Remember Sarah from our opening story? By recognizing these pitfalls and actively working to overcome them, she was able to turn her challenges into opportunities for growth. She learned to embrace feedback, dedicated time to continuous learning, improved her problem-solving approach, maintained a healthy work-life balance, and developed a realistic understanding of her worth.&lt;/p&gt;

&lt;p&gt;Your journey as a developer is a marathon, not a sprint. By avoiding these common mistakes and cultivating good habits early in your career, you'll set yourself up for long-term success and satisfaction in the exciting world of software development.&lt;/p&gt;

</description>
      <category>development</category>
      <category>beginners</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Funny JavaScript, It'll make you Laugh and Cry</title>
      <dc:creator>Sumrit Grover</dc:creator>
      <pubDate>Sun, 09 Jun 2024 04:46:56 +0000</pubDate>
      <link>https://dev.to/grover_sumrit/funny-javascript-itll-make-you-laugh-and-cry-4925</link>
      <guid>https://dev.to/grover_sumrit/funny-javascript-itll-make-you-laugh-and-cry-4925</guid>
      <description>&lt;p&gt;Even though Javascript is the most sought after language for developers all around the world, it is a funny language, with nuances that can turn our everyday jobs hell. Some of the nuances will even have you laughing out loud.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. JavaScript will have you go &lt;em&gt;BaNaNa&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Lets start with something that most of you would mostly know, the infamous joke in JS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;'"B" + "a" + +"a" + "a"; // -&amp;gt; BaNaNa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Explanation
&lt;/h4&gt;

&lt;p&gt;The first part &lt;code&gt;"B"+"a"&lt;/code&gt; will be a string concatenation. the magically part would be &lt;code&gt;+ + 'a'&lt;/code&gt;, here first JS will try and type cast &lt;code&gt;+ 'a'&lt;/code&gt; to a string, will would result in NaN getting concatenated to the string. The remaining would also be a simple concatenation, &lt;code&gt;+ 'a'&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;This would make the result go &lt;em&gt;BaNaNa&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Two &lt;code&gt;[]&lt;/code&gt; are not equal
&lt;/h3&gt;

&lt;p&gt;Array is not equal to an array 🤯&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[] == ![]; //-&amp;gt; true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Explanation
&lt;/h4&gt;

&lt;p&gt;The abstract equality operator will convert both sides to zero but for different reasons. Arrays are always truthy, the opposite of that would be &lt;code&gt;false&lt;/code&gt;, which would then be coerced to a &lt;code&gt;0&lt;/code&gt;. On the left it would be coerced to a &lt;code&gt;0&lt;/code&gt;, because empty array is coerced to a number without becoming a boolean first, and empty arrays are coerced to 0, despite being truthy.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;true&lt;/code&gt; is not equal to &lt;code&gt;[]&lt;/code&gt; but also not to &lt;code&gt;![]&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;true == []; // -&amp;gt; false
true == ![]; // -&amp;gt; false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Explanation
&lt;/h4&gt;

&lt;p&gt;For the first statement, because we are using abstract equalities, the &lt;code&gt;[]&lt;/code&gt; would be coerced to 0 and true will be coerced to 1.  Hence &lt;code&gt;1 != 0&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;While in the second statement, &lt;code&gt;![]&lt;/code&gt; would change to false, because &lt;code&gt;[]&lt;/code&gt; is a truthy value.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;code&gt;Object.is()&lt;/code&gt; and &lt;code&gt;===&lt;/code&gt; don't work respond the same
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Object.is()&lt;/code&gt; determines if two values have the same value or not. It works similar(not the same) to the &lt;code&gt;===&lt;/code&gt; operator.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Object.is(-0, 0); // -&amp;gt; false
-0 === 0; // -&amp;gt; true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Explanation
&lt;/h4&gt;

&lt;p&gt;In JS, &lt;code&gt;-0&lt;/code&gt; and &lt;code&gt;0&lt;/code&gt; are strict equals but they are not the same value. &lt;/p&gt;

&lt;h3&gt;
  
  
  5. Minimal value is greater than zero
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Number.MIN_VALUE&lt;/code&gt; is the smallest number, which is greater than zero:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Number.MIN_VALUE &amp;gt; 0; // -&amp;gt; true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Explanation
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;Number.MIN_VALUE&lt;/code&gt; is &lt;code&gt;5e-324&lt;/code&gt;, the smallest positive number that can be represented with floating point precision(closest you can get to zero). &lt;/p&gt;

&lt;h3&gt;
  
  
  6. Precision of &lt;code&gt;0.1&lt;/code&gt; + &lt;code&gt;0.2&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;This will tickle your funny bone, the addition of 0.1 and 0.2 with accuracy you couldn't imagine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0.1 + 0.2; // -&amp;gt; 0.30000000000000004
0.1 + 0.2 === 0.3; // -&amp;gt; false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Explanation
&lt;/h4&gt;

&lt;p&gt;The response is not a bug but the &lt;em&gt;indented&lt;/em&gt; behaviour, because our systems are 2 based systems, you can clearly express fractions whose denominator only has a prime factor of 2. In binary, 1/2, 1/4, 1/8 would all be expressed cleanly as decimals, while 1/5 or 1/10 would be repeating decimals. &lt;/p&gt;

&lt;h3&gt;
  
  
  7. Comparing 3 numbers
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 &amp;lt; 2 &amp;lt; 3; // -&amp;gt; true
3 &amp;gt; 2 &amp;gt; 1; // -&amp;gt; false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Explanation
&lt;/h4&gt;

&lt;p&gt;This all happens because of type conversions, lets try and understand what is happening with code itself&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 &amp;lt; 2 &amp;lt; 3; // 1 &amp;lt; 2 -&amp;gt; true
true &amp;lt; 3; // true -&amp;gt; 1
1 &amp;lt; 3; // -&amp;gt; true

3 &amp;gt; 2 &amp;gt; 1; // 3 &amp;gt; 2 -&amp;gt; true
true &amp;gt; 1; // true -&amp;gt; 1
1 &amp;gt; 1; // -&amp;gt; false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  TL;DR
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;JavaScript is a very funny language, and understanding it can be a pain, share this with your friends to give them a headache as well&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>learning</category>
    </item>
    <item>
      <title>Unleashing the Power of the React Compiler</title>
      <dc:creator>Sumrit Grover</dc:creator>
      <pubDate>Wed, 05 Jun 2024 06:30:00 +0000</pubDate>
      <link>https://dev.to/grover_sumrit/unleashing-the-power-of-the-react-compiler-4pok</link>
      <guid>https://dev.to/grover_sumrit/unleashing-the-power-of-the-react-compiler-4pok</guid>
      <description>&lt;p&gt;The React team has introduced their own compiler, which aims to minimize the effort developers need to put in and significantly boost their productivity. Currently, the React compiler is an experimental feature and is not yet production-ready. &lt;strong&gt;But that won't stop us from exploring the exciting possibilities of the new *React Compiler&lt;/strong&gt;*. Let's get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  What Sets the Compiler Apart
&lt;/h2&gt;

&lt;p&gt;When writing code, you no longer need to worry about memoizing your code to prevent side effects that impact performance or cause unnecessary rendering on the screen.&lt;/p&gt;

&lt;p&gt;If you're familiar with React, you've likely encountered &lt;code&gt;useCallback&lt;/code&gt;, &lt;code&gt;useMemo&lt;/code&gt;, and &lt;code&gt;memo&lt;/code&gt;. These APIs inform React that a component doesn't need to re-compute if its inputs remain the same. For a deeper understanding of these APIs, refer to the official documentation &lt;a href="https://react.dev/reference/react/hooks"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While these APIs are excellent for grasping memoization and its workings, it's common to forget to use them or use them incorrectly. Even the most experienced developers can make mistakes that result in significant performance drawbacks.&lt;/p&gt;

&lt;p&gt;The compiler leverages its understanding of JavaScript and the &lt;a href="https://react.dev/reference/rules"&gt;Rules of React&lt;/a&gt; to automatically memoize your components and hooks. If you inadvertently break the rules of React, the compiler will skip that file and continue compiling the remaining code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Assumptions Made by the Compiler
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Your code is valid and semantically correct JavaScript.&lt;/li&gt;
&lt;li&gt;You adhere to the Rules of React.&lt;/li&gt;
&lt;li&gt;You ensure that nullable/optional values and properties are defined before accessing them.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Utilizing the React Compiler
&lt;/h2&gt;

&lt;p&gt;To discover how to integrate the React compiler into your existing codebase, refer to the steps outlined in the &lt;a href="https://react.dev/learn/react-compiler#should-i-try-out-the-compiler"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;React Compiler requires React 19 RC. Make sure to upgrade to React 19 before using the React compiler.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can experiment with the compiler in any project that has React as a dependency. For instance, your Next.js project can seamlessly integrate with the React compiler.&lt;/p&gt;

&lt;p&gt;Remember to install the &lt;a href="https://react.dev/learn/react-compiler#installing-eslint-plugin-react-compiler"&gt;ESLint plugin&lt;/a&gt; for a clearer understanding of issues you may encounter while strictly adhering to the rules of React.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrating with Your Codebase
&lt;/h2&gt;

&lt;p&gt;Due to JavaScript's flexible nature, the compiler may not detect all possible violations and may proceed with false negatives. (The compiler may unintentionally compile files that violate the rules of React, which is not the desired behavior.)&lt;/p&gt;

&lt;p&gt;You can start by introducing the compiler to a small portion of your extensive codebase. Adopt it in a specific directory first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const ReactCompilerConfig = {
  sources: (filename) =&amp;gt; {
    return filename.indexOf('src/path/to/dir') !== -1;
  },
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a new codebase, you can enable the compiler for your entire codebase, which is the default behavior.&lt;/p&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;With the React compiler, memoization is taken care of for you, eliminating the need to worry about it.&lt;/li&gt;
&lt;li&gt;The compiler is available for experimental use but is not yet ready for production deployments.&lt;/li&gt;
&lt;li&gt;To ensure the React compiler can work its magic, you must follow the rules of React.&lt;/li&gt;
&lt;li&gt;The compiler can be used with any project that has React as a dependency.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>nextjs</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Git 101 for Beginners: Learn Git Commands, Branching, and Collaboration</title>
      <dc:creator>Sumrit Grover</dc:creator>
      <pubDate>Sat, 18 May 2024 14:51:02 +0000</pubDate>
      <link>https://dev.to/grover_sumrit/git-101-for-beginners-learn-git-commands-branching-and-collaboration-2cdp</link>
      <guid>https://dev.to/grover_sumrit/git-101-for-beginners-learn-git-commands-branching-and-collaboration-2cdp</guid>
      <description>&lt;p&gt;You just got your first internship at a big shot startup, it's your first day on the job and you walk in with a bag full of enthusiasm and a head full of coding dreams, really excited to work with the few of the greatest minds of the century and build software that will put man on mars only to realise that version control is a myth in this realm.&lt;/p&gt;

&lt;p&gt;Your manager approaches you, hands you a pendrive and says, "Welcome to the team! Here's the latest version of our codebase, or maybe I think it is". You plug in the USB drive only to be greeted by folders like version_final, version_final_v1, final_final_v2. You see everyone taking turns at a computer fixing their code directly on the production server.&lt;/p&gt;

&lt;p&gt;You take a deep breath and somehow muster up the courage to go talk to your manager and tell them about version control and git. &lt;/p&gt;

&lt;p&gt;"Git? Isn't that just another buzzword? We've been doing fine without it so far."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;sigh&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;"I thought so too, but hear me out..."&lt;/p&gt;

&lt;p&gt;"Alright, you got 5 minutes"&lt;/p&gt;

&lt;h1&gt;
  
  
  What is version control and git?
&lt;/h1&gt;

&lt;p&gt;More than just a buzzword, git is a powerful tool that allows developers to track changes, collaborate seamlessly, and maintain a clear history of our codebase. It prevents the scenarios which causes conflicting file versions and lost changes. &lt;/p&gt;

&lt;p&gt;With git, each developer gets a copy of their own codebase. They can make changes, try out new experiments and even work offline or async. When they are ready, they can push their changes to a central repository, where your peers can review your code and merge it in the main branch of the central repository for it to be available to everyone else working on the same codebase. They can then pull those changes to their local codebase preventing any version mismatch and lost changes. It's like a safety net for the codebase.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Push? Pull? Repository? Merge? What are these terms you must be thinking, don't worry we'll get to everything one by one&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Installing Git
&lt;/h1&gt;

&lt;p&gt;Installation of git can vary from machine to machine depending on what operating system you are using. &lt;/p&gt;

&lt;h2&gt;
  
  
  Installing git for MacOS
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Using homebrew
&lt;/h3&gt;

&lt;p&gt;You can install &lt;a href="https://brew.sh/"&gt;homebrew&lt;/a&gt; if you already don't have it, then : &lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ brew install git&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  MacPorts
&lt;/h3&gt;

&lt;p&gt;Install &lt;a href="https://www.macports.org/"&gt;MacPorts&lt;/a&gt; if you don't already have it, then:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ sudo port install git&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  XCode
&lt;/h3&gt;

&lt;p&gt;If you don't want to use either of these tools to install git, then :&lt;/p&gt;

&lt;p&gt;You can download Xcode from the Apple App Store. Apple ships a binary of git with XCode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing git for Linux and Unix
&lt;/h2&gt;

&lt;p&gt;There are a lot of Linux distributions and it is easiest to install Git on Linux using the preferred package manager of your Linux distribution.&lt;/p&gt;

&lt;p&gt;You can head to this &lt;a href="https://git-scm.com/download/linux"&gt;link&lt;/a&gt; and checkout the command to install git according to your Linux distro.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing git for Windows
&lt;/h2&gt;

&lt;p&gt;You can head to this &lt;a href="https://git-scm.com/download/win"&gt;link&lt;/a&gt; and click on the &lt;strong&gt;Click here to download&lt;/strong&gt; button on the website. It will download the package installer, you can open that up after it's downloaded and follow along the instructions.&lt;/p&gt;

&lt;h1&gt;
  
  
  The basics
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;A repository is the most basic element of Git. It's a place where you can store your code, your files, and each file's revision history. Repositories can have multiple collaborators and can be either public or private. The details of a git repository are stored in a &lt;code&gt;.git&lt;/code&gt; file and each and every file and folder in the same folder as the &lt;code&gt;.git&lt;/code&gt; file are considered a part of that repository and their changes are tracked within that repository.&lt;/p&gt;

&lt;p&gt;To initialise a repository, you can run the command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create a &lt;code&gt;.git&lt;/code&gt; file in the current directory&lt;/p&gt;

&lt;h2&gt;
  
  
  Terms related to a repository
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Branch
&lt;/h3&gt;

&lt;p&gt;Branches are one of the most powerful feature of Git. With branches you can make changes to your code without it affecting the main codebase. Think of it like a tree with multiple branches growing out of it. &lt;/p&gt;

&lt;p&gt;The main branch or the branch with the stable production code can be thought of as the trunk of the tree. Now we want to work on a new feature without it disturbing the stable code, that's where branching comes in. If you're working on a feature X, you can create a new branch called as &lt;code&gt;feature-X&lt;/code&gt; from the &lt;code&gt;main&lt;/code&gt; branch, or to fix a bug you can create a branch called as &lt;code&gt;bug-fix&lt;/code&gt;. It's like creating a separate workspace where you can work on and experiment with new changes without it affecting the main codebase.&lt;/p&gt;

&lt;p&gt;You can create a new branch from an existing branch using the following command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout -b "branch-name"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-b&lt;/code&gt; flag here tells git that this is a new branch. If you want to switch between existing branches, you can run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout "branch-name"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Clone
&lt;/h3&gt;

&lt;p&gt;Cloning means to download an exact copy of a repository from the server including all versions of every file and folder. To clone a repository, you can use the following command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &amp;lt;your-repository-url&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Merge
&lt;/h3&gt;

&lt;p&gt;To take changes from one branch and apply it to another branch is called merge or merging. While merging, we go to the branch we want to merge the code into and then write the merge command with the name of the branch from which we want the code to be merged. To merge two branches, you can run the following command in your terminal :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch &lt;span class="c"&gt;# Will display a list of all the branches&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; main
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;dev &lt;span class="c"&gt;#the current branch&lt;/span&gt;
git checkout main &lt;span class="c"&gt;# Switching to the branch in which we want to merge the code into&lt;/span&gt;
git merge dev 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this, all the changes that you did in your &lt;code&gt;dev&lt;/code&gt; branch will be reflected in your &lt;code&gt;main&lt;/code&gt; branch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pull Request
&lt;/h3&gt;

&lt;p&gt;Pull requests are one of the most important features of git and are quite similar to git merge. A pull request is essentially a way to say, 'Hey, team! I've got some changes I'd like to merge into the main codebase. Can you take a look and make sure everything looks good?'. When you create a pull request, you're opening up a conversation about your changes. It's like sending an invitation to your teammates, asking them to review your work.&lt;/p&gt;

&lt;p&gt;Pull requests also serve as a safety net. If there are conflicts or issues discovered during the review process, you can address them directly within the pull request. It's a collaborative effort to ensure that the code being merged is of the highest quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  CLI Commands
&lt;/h2&gt;

&lt;p&gt;Now that we've covered the basics of Git and the power of branching and pull requests, it's time to dive into the nitty-gritty. Let's talk about the essential Git commands &lt;/p&gt;

&lt;h3&gt;
  
  
  git add
&lt;/h3&gt;

&lt;p&gt;When you have made changes to your code and are ready to push them on to the repository you use git add. It's like saying, "Hey Git! Here are my changes, i want you to pay attention to them". You can manually select the files or folders that you want to add to your commit by using the following command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add index.js &lt;span class="c"&gt;## Assuming index.js is the name of the file you're working on&lt;/span&gt;
git add server.js
git add src/ &lt;span class="c"&gt;## Using a `/` tells git to include the whole folder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or,&lt;/p&gt;

&lt;p&gt;You can let git do the job and use&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using the above command tells git to add all the changes that you've made across the whole repository, so if there are a 100 files that you have changed you need not manually add all of them&lt;/p&gt;

&lt;h3&gt;
  
  
  git commit
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;git add&lt;/code&gt; and &lt;code&gt;git commit&lt;/code&gt; are like PB&amp;amp;J of git. Once you've staged your changes with &lt;code&gt;git add&lt;/code&gt;, it's time to commit them. This is where &lt;code&gt;git commit&lt;/code&gt; comes in. It's like sealing the deal, wrapping up your changes in a nice, tidy package. The command to make a commit is&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Added Feature X"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;-m&lt;/code&gt; flag allows us to include a message with the commit, it's like a note to yourself and the people who are working on the same project explaining what the changes are. It's good practice to write clear and concise commit messages.&lt;/p&gt;

&lt;h3&gt;
  
  
  git status
&lt;/h3&gt;

&lt;p&gt;This command gives you a snapshot of the current state of the repository. It tells you which files have been modified, which ones are staged(committed, ready to be pushed) and which ones are untracked(files changed but not added via &lt;code&gt;git add&lt;/code&gt; yet). You can think of it as a progress report for your code.&lt;/p&gt;

&lt;h3&gt;
  
  
  git push
&lt;/h3&gt;

&lt;p&gt;This command is used to push the changes from your local repository to a remote repository hosted on the cloud most probably somewhere on Github, Gitlab or Bitbucket. When you're ready to share your commits with the rest of the team you use &lt;code&gt;git push&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By specifying the remote repository (usually named 'origin') and the branch you want to push (in this case, 'main'), you're uploading your commits to the remote repository for others to see and collaborate on.&lt;/p&gt;

&lt;p&gt;If you're working on a new branch, let's say &lt;code&gt;feature-x&lt;/code&gt; , this branch is present in your local repository but not on the origin, so if you do a &lt;code&gt;git push&lt;/code&gt;, the remote will reject your push giving you the error message that the branch does not exist. To tackle this error, while making a push to a new branch we use the &lt;code&gt;--set-upstream&lt;/code&gt; flag with the push, this tells git to setup a new upstream for this push. Here it is in action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;--set-upstream&lt;/span&gt; origin feature-x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  git pull
&lt;/h3&gt;

&lt;p&gt;When you want to update your local repository with the latest changes made by your teammates, you use &lt;code&gt;git pull&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;This command fetches the latest changes from the remote repository and automatically merges them into your current branch, syncing your work with the rest of the team.&lt;/p&gt;

&lt;h3&gt;
  
  
  git fetch
&lt;/h3&gt;

&lt;p&gt;This command is like having a peak into what's new in the repository without merging it to your local repository unlike &lt;code&gt;git pull&lt;/code&gt; .  It allows you to review the changes and decide whether you want to merge them manually using &lt;code&gt;git merge&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;As we've explored the world of Git, from its basic concepts to essential commands, I hope you now see the power and potential it holds for collaborative software development. Git is more than just a version control tool; it's a catalyst for teamwork, a guardian of code integrity, and a navigator through the complex landscape of project management. By mastering Git, you'll unlock a new level of efficiency and confidence in your development workflow. So, whether you're a seasoned developer or just starting your coding journey, embrace Git, and let it be your guide. Remember, with great Git comes great responsibility—the responsibility to write clean code, craft meaningful commits, and collaborate with empathy and respect. As you venture forth, armed with your newfound Git knowledge, I have no doubt that you'll leave a positive mark on every codebase you touch. Happy coding, and may your branches always merge smoothly!&lt;/p&gt;

&lt;h2&gt;
  
  
  tl;dr
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Git is a powerful version control tool that enables developers to track changes, collaborate seamlessly, and maintain a clear history of the codebase.&lt;/li&gt;
&lt;li&gt;Git provides each developer with their own copy of the codebase, allowing for independent work and experimentation.&lt;/li&gt;
&lt;li&gt;Key Git terms include repository, branch, clone, merge, and pull request.&lt;/li&gt;
&lt;li&gt;Essential Git commands: &lt;code&gt;git add&lt;/code&gt; stages changes, &lt;code&gt;git commit&lt;/code&gt; wraps up changes with a message, &lt;code&gt;git status&lt;/code&gt; provides a snapshot of the repository, &lt;code&gt;git push&lt;/code&gt; uploads commits, &lt;code&gt;git pull&lt;/code&gt; fetches and merges changes, and &lt;code&gt;git fetch&lt;/code&gt; allows previewing changes.&lt;/li&gt;
&lt;li&gt;Branches enable developers to work on features or bug fixes without affecting the main codebase.&lt;/li&gt;
&lt;li&gt;Merging and pull requests facilitate the integration of changes from one branch to another.&lt;/li&gt;
&lt;li&gt;Writing clear and concise commit messages is crucial for maintaining a readable and informative project history.&lt;/li&gt;
&lt;li&gt;Use the &lt;code&gt;--set-upstream&lt;/code&gt; flag when pushing to a new branch to establish the connection between local and remote repositories.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>beginners</category>
      <category>gitlab</category>
    </item>
    <item>
      <title>Make your own Custom Hooks in React!</title>
      <dc:creator>Sumrit Grover</dc:creator>
      <pubDate>Sat, 12 Feb 2022 08:27:03 +0000</pubDate>
      <link>https://dev.to/grover_sumrit/make-you-custom-hooks-in-react-4eig</link>
      <guid>https://dev.to/grover_sumrit/make-you-custom-hooks-in-react-4eig</guid>
      <description>&lt;p&gt;&lt;strong&gt;React&lt;/strong&gt; provides many in-built hooks that you can use in your app&lt;/p&gt;

&lt;p&gt;But you can also create &lt;strong&gt;custom&lt;/strong&gt; hooks, which helps reduce the amount of code&lt;/p&gt;

&lt;p&gt;Custom hooks are similar to functions but usually start with &lt;em&gt;use&lt;/em&gt; and may call other in-build hooks as well&lt;/p&gt;

&lt;h2&gt;
  
  
  Need for Custom Hooks
&lt;/h2&gt;

&lt;p&gt;The main reason why you should be using Custom hooks is to maintain the concept of &lt;strong&gt;DRY&lt;/strong&gt;(Don't Repeat Yourself)&lt;/p&gt;

&lt;p&gt;To understand more about &lt;strong&gt;DRY&lt;/strong&gt; and &lt;strong&gt;WET&lt;/strong&gt; refer to the tweet below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/grover_sumrit/status/1486712333711724547"&gt;Dry or Wet Code&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  When and How to use it
&lt;/h2&gt;

&lt;p&gt;If you want to share the logic between different components, we can extract that to a &lt;strong&gt;separate function&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Because custom hooks are JS functions the rules of hooks apply to it as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rules of Hooks are-
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Never call Hooks from inside a &lt;strong&gt;loop or condition&lt;/strong&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hooks should sit at the &lt;strong&gt;top-level&lt;/strong&gt; of your component&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Only call Hooks from React functional components&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Never call a Hook from a regular function&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hooks can call other Hooks&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Building your Custom Hook
&lt;/h2&gt;

&lt;p&gt;Making your own hook is similar to making a JavaScript function, but its name starts with &lt;em&gt;use&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Inside them, you can use any other hook, take anything as parameters, return anything you want it to return.&lt;/p&gt;

&lt;h2&gt;
  
  
  Put it to the test
&lt;/h2&gt;

&lt;p&gt;Let us create a custom hook that uses &lt;em&gt;useEffect&lt;/em&gt; hook that updates the title of the document &lt;/p&gt;

&lt;p&gt;This is how you traditionally write the code&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Creating the custom hook
&lt;/h2&gt;

&lt;p&gt;What we would do is take out the &lt;em&gt;incrementCount&lt;/em&gt; function and put it in a separate file and pass the count state in it.&lt;/p&gt;

&lt;p&gt;Like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8-h9ViPm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tuwbxgax0qgbfm7af1oq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8-h9ViPm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tuwbxgax0qgbfm7af1oq.png" alt="Image description" width="880" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Call the Custom hook
&lt;/h2&gt;

&lt;p&gt;Call the hook in your file as you would normally call a JS function&lt;/p&gt;

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

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

&lt;p&gt;This is how easy it is to make your own custom hooks and integrate them into your application&lt;/p&gt;

&lt;p&gt;If you want to try and experiment with this code, here is the link to the same &lt;/p&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/smgrv123/ca8ac47c8cefed07239d772082852464"&gt;Code Base&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>What are DApps</title>
      <dc:creator>Sumrit Grover</dc:creator>
      <pubDate>Wed, 09 Feb 2022 19:11:40 +0000</pubDate>
      <link>https://dev.to/grover_sumrit/what-are-dapps-17o8</link>
      <guid>https://dev.to/grover_sumrit/what-are-dapps-17o8</guid>
      <description>&lt;p&gt;Most apps today run on &lt;strong&gt;centralized&lt;/strong&gt; networks, operated by a controlling authority. For example, social media networks, banks, and streaming services hold your data on centralized servers.&lt;/p&gt;

&lt;p&gt;While this &lt;strong&gt;centralization&lt;/strong&gt; is efficient, it generates huge amounts of user data. And that means unwanted exposure to hacks, creepy advertising.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dapps&lt;/strong&gt; might feel like regular apps. But behind the scenes, they have some special qualities because they inherit all of the &lt;em&gt;blockchain superpowers&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Here's what makes DApps different Apps&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%2F7164dpleafddh8r1rbf4.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%2F7164dpleafddh8r1rbf4.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. No Owners
&lt;/h2&gt;

&lt;p&gt;Dapp code cannot be removed once it has been deployed on Blockchain. Furthermore, anyone may utilize the dapp's functionalities. Even if the dapp's team disbanded, you may still utilize it. Once it's on Ethereum, it's there to stay.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Free from censorship
&lt;/h2&gt;

&lt;p&gt;You can't be blocked from using a dapp or submitting transactions. For example, if Twitter was on Ethereum, no one could block your account or stop you from tweeting.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. One anonymous login
&lt;/h2&gt;

&lt;p&gt;Most dapps do not need you to divulge your real-world identity. Your account serves as your login, and all you need is a wallet.&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%2Flzczx9mab4e9a28yjfpu.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%2Flzczx9mab4e9a28yjfpu.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Plug and Play
&lt;/h2&gt;

&lt;p&gt;Dapp code is frequently available and compatible by default. Teams frequently build on the work of other teams. If you want to allow users to exchange tokens in your dapp, just copy and paste the code from another dapp.&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%2F20q83fvfpf9ibjbf56ps.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%2F20q83fvfpf9ibjbf56ps.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. No down time
&lt;/h2&gt;

&lt;p&gt;The dapp will only go down if Ethereum itself goes down once it is live on Ethereum. Attacks on networks the size of Ethereum's are notoriously tough.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Backed by Cryptography
&lt;/h2&gt;

&lt;p&gt;Assailants won't be able to fabricate transactions or other dapp activities on your behalf because of cryptography. To keep your credentials safe, you authorize dapp actions with your Ethereum account - normally via your wallet.&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%2Fllhzdse0xusfh1ss59px.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%2Fllhzdse0xusfh1ss59px.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Free from censorship
&lt;/h2&gt;

&lt;p&gt;It is not possible to be prevented from utilizing a dapp or submitting transactions. No one could restrict your account or prevent you from tweeting if Twitter was run on Ethereum, for example.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>blockchain</category>
      <category>web3</category>
      <category>webdev</category>
    </item>
    <item>
      <title>9 Beginner Friendly Tricks every JavaScript Dev Should know</title>
      <dc:creator>Sumrit Grover</dc:creator>
      <pubDate>Mon, 24 Jan 2022 13:54:59 +0000</pubDate>
      <link>https://dev.to/grover_sumrit/9-beginner-friendly-tricks-every-javascript-dev-should-know-3lm4</link>
      <guid>https://dev.to/grover_sumrit/9-beginner-friendly-tricks-every-javascript-dev-should-know-3lm4</guid>
      <description>&lt;p&gt;When I first began learning JavaScript, I kept a record of every time-saving tip I discovered in other people's code, on code challenge websites, and everywhere other than the tutorials I was following.&lt;/p&gt;

&lt;p&gt;I'll give 9 hand-picked suggestions that I think are exceptionally brilliant or beneficial. This post is aimed for beginners, but I hope that even skilled JavaScript developers will find something valuable in this list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Destructing assignment syntax
&lt;/h2&gt;

&lt;p&gt;It is an easy and efficient way of extracting relevant information from JavaScript objects.&lt;/p&gt;

&lt;p&gt;This syntax allows for a variety of tricks, such as changing variables in one-liners or parsing only the relevant attributes from a returned object.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const company = {
  products: ['phone', 'laptop', 'camera'],
}
const { 0: phone, 2: camera } = company.products

console.log(camera) //camera
console.log(phone) //phone
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Change the size of array
&lt;/h2&gt;

&lt;p&gt;If you change the length of the array you are working with then it would remove the excess elements. This can also be used to empty your array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const array = [1, 2, 3, 4, 5]

console.log(array.length)
//5

array.length = 3
console.log(array.length)
//3

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Spread Operator
&lt;/h2&gt;

&lt;p&gt;You can use the spread operator to shallow copy arrays and objects!!!!&lt;/p&gt;

&lt;p&gt;It's also a great technique to concatenate arrays or merge objects with a one-liner, rather than painstakingly iterating over each instance and merging.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const array = [1, 2, 3, 4, 5]
const company = {
  founder: 'John Doe',
}

console.log({ ...company, emp: 10 }) //{founder:"John Doe",emp:10}
console.log([...array, 6]) //[1,2,3,4,5,6]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Sorting Arrays
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const array = [1, 5, 7, 9, 6, 3]

console.log(array.sort((a, b) =&amp;gt; a - b)) //[1,3,5,6,7,9]
console.log(array.sort((a, b) =&amp;gt; b - a)) //[9,7,6,5,3,1]

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Find the time your code takes to execute
&lt;/h2&gt;

&lt;p&gt;The time method accepts a timer name as an input and expects the same timer name to be given in a call to timeEnd.&lt;/p&gt;

&lt;p&gt;The timeEnd method shows the elapsed time in milliseconds between two function calls.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.time('timer')
for (let i = 0; i &amp;lt; 1e7; i++);
console.timeEnd('timer')

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Convert Decimal to Binary
&lt;/h2&gt;

&lt;p&gt;Want to convert your integer to Binary or Hexa or Octa values..&lt;/p&gt;

&lt;p&gt;This is the JavaScript way to do it!!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const num = 10

console.log(num.toString(2)) //10
console.log(num.toString(8)) //12
console.log(num.toString(16)) //a

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  No need to write console.log again and again
&lt;/h2&gt;

&lt;p&gt;Tired of writing console.log again and again.&lt;/p&gt;

&lt;p&gt;Not anymore. See how you can shorten your console log and speed up your coding.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const c= console.log.bind()

c(455)
// 455
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Filter Falsy Values
&lt;/h2&gt;

&lt;p&gt;Ever need to filter falsy values out of an array? &lt;/p&gt;

&lt;p&gt;False values such as 0, undefined, null, false, "", can be simply ignored using the following method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const arr=[1,2,'',false]

arr.filter(Boolean)
// [1,2]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Modify Your Buttons
&lt;/h2&gt;

&lt;p&gt;Use Pressable wrapper. Similar to Touchable/Highlight components, but more customizable. &lt;/p&gt;

&lt;p&gt;A few of the press functions are&lt;br&gt;
onPressIn is called when a press is activated.&lt;br&gt;
onPressOut is called when the press gesture is deactivated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c4sECpiz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/25rsom7ennw2oxwmj07q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c4sECpiz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/25rsom7ennw2oxwmj07q.png" alt="Image description" width="880" height="662"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Have you been hearing a lot about crypto assets and the concept of NFTs? </title>
      <dc:creator>Sumrit Grover</dc:creator>
      <pubDate>Wed, 19 Jan 2022 18:19:26 +0000</pubDate>
      <link>https://dev.to/grover_sumrit/have-you-been-hearing-a-lot-about-crypto-assets-and-the-concept-of-nfts-p8d</link>
      <guid>https://dev.to/grover_sumrit/have-you-been-hearing-a-lot-about-crypto-assets-and-the-concept-of-nfts-p8d</guid>
      <description>&lt;h1&gt;
  
  
  Let's delve into why they are such a hot commodity.
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Firstly what does NFT even stand for!!!
&lt;/h2&gt;

&lt;p&gt;NFTs stand for "non-fungible-tokens".&lt;/p&gt;

&lt;p&gt;Ops. That doesn't make it any better. &lt;br&gt;
"Non-fungible" more or less means that it is unique and can not be replaced with something else.&lt;/p&gt;

&lt;p&gt;It is like a one of a kind sneaker, if you traded it for something else, you would be having something completely different.&lt;/p&gt;

&lt;h2&gt;
  
  
  So how do these "NFTs" work?
&lt;/h2&gt;

&lt;p&gt;At a very level, most NFTs are part of the Ethereum blockchain (or any other blockchain for that matter).Ethereum blockchain supports these NFTs, which store extra information that makes them work differently from, say, an ETH coin.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f_d-uTkN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bgjtftzyzfv9bk7eklc5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f_d-uTkN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bgjtftzyzfv9bk7eklc5.png" alt="Image description" width="700" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Will it become something like art collecting?
&lt;/h2&gt;

&lt;p&gt;Some people would be hoping so.Like whoever paid almost $390,000 for a 50-second video by Grimes or the person who paid $6.6 million for a video by Beeple.&lt;/p&gt;

&lt;p&gt;But you can find and download the video that a person paid millions for. You can copy a digital file as many times as you want, including the art that’s included with an NFT.&lt;/p&gt;

&lt;p&gt;Just like this.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OWzUvos2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/56yzbelcbcqnht6j7maw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OWzUvos2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/56yzbelcbcqnht6j7maw.png" alt="Image description" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But NFTs are designed to give you something that can’t be copied: ownership of the work. &lt;/p&gt;

&lt;p&gt;To put it in terms of physical art collecting: anyone can buy a Monet print. But only one person can own the original.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the difference between NFTs and cryptocurrencies?
&lt;/h2&gt;

&lt;p&gt;NFTs are often programmed in the same way as cryptocurrency, such as Bitcoin or Ethereum, is programmed, but that's where the resemblance ends.&lt;/p&gt;

&lt;p&gt;Physical money, stocks, and cryptos are fungible, meaning that they can be exchanged for one another.&lt;/p&gt;

&lt;p&gt;NFTs are different. Each has a digital signature that makes it impossible for NFTs to be equal to one another.&lt;/p&gt;

&lt;h2&gt;
  
  
  But why would you be willing to pay big bucks for something that just might amount to a trading card?
&lt;/h2&gt;

&lt;p&gt;Sure NFTs are risky and the future is uncertain in that regard.&lt;/p&gt;

&lt;p&gt;NFT’s value is based entirely on what someone else is willing to pay for it. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ezMRhMb6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ywaa9foz995zik6l9l73.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ezMRhMb6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ywaa9foz995zik6l9l73.png" alt="Image description" width="400" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Therefore, demand will drive the price rather than fundamental, technical, or economic indicators.&lt;/p&gt;




&lt;p&gt;Thanks you for Reading the entire post. If you enjoyed and wish to read similar content do follow me on &lt;a href="https://twitter.com/grover_sumrit"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>beginners</category>
    </item>
    <item>
      <title>ES2020, and what it brings to the table.</title>
      <dc:creator>Sumrit Grover</dc:creator>
      <pubDate>Fri, 07 Jan 2022 09:17:29 +0000</pubDate>
      <link>https://dev.to/grover_sumrit/es2020-and-what-it-brings-to-the-table-41bf</link>
      <guid>https://dev.to/grover_sumrit/es2020-and-what-it-brings-to-the-table-41bf</guid>
      <description>&lt;h2&gt;
  
  
  Here are 6 new JavaScript features that you should be using
&lt;/h2&gt;

&lt;h3&gt;
  
  
  BigInt
&lt;/h3&gt;

&lt;p&gt;Currently, the largest number you can store in an integer is &lt;code&gt;pow(2,53)-1&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Now you can even go beyond that.&lt;/p&gt;

&lt;p&gt;But for this to work properly, you need to append &lt;code&gt;n&lt;/code&gt; at the end of the integer.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;n&lt;/code&gt; denotes that this is a &lt;strong&gt;BigInt&lt;/strong&gt; and should be treated differently.&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%2Fbq1pwrznzlsfqjx58s67.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%2Fbq1pwrznzlsfqjx58s67.png" alt="BIGINT"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Dynamic Imports
&lt;/h3&gt;

&lt;p&gt;This gives you the option to import JS files dynamically as modules that you import natively.&lt;/p&gt;

&lt;p&gt;This feature will help you ship on-demand-request code, better known as code splitting, without the overhead of webpack or other module bundlers.&lt;br&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%2Fcx1ltowrf0uk5kzciqi0.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%2Fcx1ltowrf0uk5kzciqi0.png" alt="DYNNAMIC IMPORTS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Nullish Coalescing
&lt;/h3&gt;

&lt;p&gt;The symbol for Nullish Coalescing is &lt;code&gt;??&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Nullish Coalescing gives you a chance to check for truly &lt;strong&gt;nullish&lt;/strong&gt; values rather than &lt;strong&gt;falsey&lt;/strong&gt; values.&lt;/p&gt;

&lt;p&gt;You might ask what is the difference between these two.&lt;/p&gt;

&lt;p&gt;In JavaScript, many values are &lt;strong&gt;falsey&lt;/strong&gt;, like empty strings, the number &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;undefined&lt;/code&gt;, &lt;code&gt;null&lt;/code&gt;, &lt;code&gt;false&lt;/code&gt;, &lt;code&gt;NaN&lt;/code&gt;, and so on.&lt;/p&gt;

&lt;p&gt;There may be times where you have to check whether the variable is &lt;strong&gt;nullish&lt;/strong&gt;(&lt;em&gt;undefined&lt;/em&gt; or &lt;em&gt;null&lt;/em&gt;), but is okay to have empty strings or false values.&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%2Fldqcwhc1gr1hst5q6mmh.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%2Fldqcwhc1gr1hst5q6mmh.png" alt="Nullish Coalescing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional Chaining
&lt;/h3&gt;

&lt;p&gt;Optional Chaining syntax allows you to access &lt;em&gt;deeply nested objects&lt;/em&gt; without worrying about the property being present or not.&lt;/p&gt;

&lt;p&gt;If the value exists amazing!!&lt;/p&gt;

&lt;p&gt;Otherwise, it will return &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0khlrrhlav2m5tk8ar1i.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%2F0khlrrhlav2m5tk8ar1i.png" alt="Optional Chaining"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Module Namespace Exports
&lt;/h3&gt;

&lt;p&gt;It was already possible to import everything using the &lt;code&gt;*&lt;/code&gt;. However, there was no symmetrical export syntax.&lt;/p&gt;

&lt;p&gt;But now you can do that like this.&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%2Fegfvt9e0tdvreu1jh64v.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%2Fegfvt9e0tdvreu1jh64v.png" alt="Module Namespace Exports"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  globalThis
&lt;/h3&gt;

&lt;p&gt;You have different global object for different platforms, &lt;code&gt;window&lt;/code&gt; for &lt;strong&gt;browsers&lt;/strong&gt;, &lt;code&gt;global&lt;/code&gt; for &lt;strong&gt;node&lt;/strong&gt;, &lt;code&gt;self&lt;/code&gt; for &lt;strong&gt;web workers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But ES2020 brought &lt;strong&gt;globalThis&lt;/strong&gt; which is considered as the global object no matter where you execute the code.&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%2F3wzi919984o64ri6i400.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%2F3wzi919984o64ri6i400.png" alt="globalThis"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  TL;DR
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;BigInt - play with very large integers, make sure you append &lt;code&gt;n&lt;/code&gt; at the end of the integer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dynamic Import - import files conditionally.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nullish Coalescing - Check for nullish values rather than falsey values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optional Chaining - check for deep nested objects without worrying about undefined values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Module Namespace Exports - export everything using the * symbol&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;globalThis - considered global object no matter where you code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;You have reached the end of the post. To find more interesting content regarding JavaScript, React, React Native make sure to follow me on &lt;a href="https://twitter.com/grover_sumrit" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Getting hooked onto React Hooks.</title>
      <dc:creator>Sumrit Grover</dc:creator>
      <pubDate>Tue, 28 Dec 2021 07:02:43 +0000</pubDate>
      <link>https://dev.to/grover_sumrit/getting-hooked-onto-react-hooks-2n67</link>
      <guid>https://dev.to/grover_sumrit/getting-hooked-onto-react-hooks-2n67</guid>
      <description>&lt;h2&gt;
  
  
  useState
&lt;/h2&gt;

&lt;p&gt;This hook as the name suggests is used to declare a state variable. This helps &lt;strong&gt;preserve values&lt;/strong&gt; between function calls.&lt;/p&gt;

&lt;p&gt;Whenever a state variable is changed it causes the &lt;strong&gt;DOM to re-render&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The first is the &lt;em&gt;name&lt;/em&gt; of the state variable that is declared and the second is the function that is called to &lt;em&gt;update the state variable&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;PS- State variable is able to hold any and all types of datatypes.&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%2Fp86yvjylrfx9mj2b6gka.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%2Fp86yvjylrfx9mj2b6gka.png" alt="useState"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  useEffect
&lt;/h2&gt;

&lt;p&gt;Using this hook, you tell React to do something after rendering the DOM. &lt;/p&gt;

&lt;p&gt;React remembers the function you passed and would call that function after performing the DOM updates.&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%2F97c593yydjr72t496ppo.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%2F97c593yydjr72t496ppo.png" alt="useEffect"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The array present at the end of the useEffect function is called the &lt;strong&gt;dependency array&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This dependency array defines how the useEffect would be used.&lt;/p&gt;

&lt;p&gt;If no dependency array is provided then it will be called &lt;em&gt;every time the DOM is updated&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If an empty array is provided, then the useEffect is only called once, &lt;em&gt;when the DOM is mounted and is never called again&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If state variables are passed in the dependency array then useEffect is called when the state variables are updated.&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%2Fl2cxwpd81mp8u0zl8jqh.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%2Fl2cxwpd81mp8u0zl8jqh.png" alt="dependency array"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  useRef
&lt;/h2&gt;

&lt;p&gt;This React Hook is used to &lt;strong&gt;create reference variables&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The values stored in useRef are also preserved between different renders, similar to useState.&lt;/p&gt;

&lt;p&gt;But unlike useState, a change in the value of &lt;strong&gt;useRef doesn't cause the DOM to render&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The useRef is completely separate from the render cycle&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%2Fwjt1v6fdky7bjstjhk9o.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%2Fwjt1v6fdky7bjstjhk9o.png" alt="useRef"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  useCallback
&lt;/h2&gt;

&lt;p&gt;What to do when a function is being called again and again without any need. You use the useCallback hook&lt;/p&gt;

&lt;p&gt;useCallback function will &lt;strong&gt;return a memoized version that of a callback function&lt;/strong&gt; that only changes when you changed the dependency array.&lt;/p&gt;

&lt;p&gt;This will help prevent unnecessary renders and optimize the child components&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%2Fwm4qd2jsqcmz5yoxdx0n.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%2Fwm4qd2jsqcmz5yoxdx0n.png" alt="useCallback"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  useMemo
&lt;/h2&gt;

&lt;p&gt;This hook is similar to the useCallback hook, but here a &lt;strong&gt;memoized value is returned&lt;/strong&gt; rather than the entire function.&lt;/p&gt;

&lt;p&gt;useMemo also has a dependency array and is called once the state in the dependency array is updated.&lt;/p&gt;

&lt;p&gt;useMemo is used to memoize costly functions so they don't have to be called every time they're rendered.&lt;/p&gt;

&lt;p&gt;Whereas useCallback is used to improve the rendering behaviour of your React function components. &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%2Fx5j6a9px6us15g3jiuw7.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%2Fx5j6a9px6us15g3jiuw7.png" alt="useMemo"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>NPM packages to make your React Native project aesthetic and your life easier!!</title>
      <dc:creator>Sumrit Grover</dc:creator>
      <pubDate>Thu, 23 Dec 2021 14:08:56 +0000</pubDate>
      <link>https://dev.to/grover_sumrit/npm-packages-to-make-your-react-native-project-aesthetic-and-your-life-easier-3icg</link>
      <guid>https://dev.to/grover_sumrit/npm-packages-to-make-your-react-native-project-aesthetic-and-your-life-easier-3icg</guid>
      <description>&lt;h3&gt;
  
  
  react-native-vector-icons
&lt;/h3&gt;

&lt;p&gt;The most popular &lt;em&gt;icons&lt;/em&gt; in the NPM GitHub package are &lt;strong&gt;React Native vector icons&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;It offers over 3,000 vector icon sets, all of which are &lt;em&gt;free&lt;/em&gt; to use. &lt;/p&gt;

&lt;p&gt;These vector icons are simple to design and include in one's project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/react-native-vector-icons"&gt;react-native-vector-icons&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TdzTpnE7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ehnx22qs59o2bccw8jw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TdzTpnE7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ehnx22qs59o2bccw8jw.png" alt="Image description" width="680" height="331"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  react-native-responsive-screen
&lt;/h3&gt;

&lt;p&gt;This library helps you create a &lt;strong&gt;responsive UI&lt;/strong&gt; for your application.&lt;/p&gt;

&lt;p&gt;You must import and utilise the &lt;code&gt;widthPercentageToDP&lt;/code&gt; and &lt;code&gt;heightPercentageToDP&lt;/code&gt; methods. The names are a little long, but they attempt to be &lt;em&gt;descriptive&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/react-native-responsive-screen"&gt;react-native-responsive-screen&lt;/a&gt;&lt;/p&gt;

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




&lt;h3&gt;
  
  
  react-native-modal
&lt;/h3&gt;

&lt;p&gt;Modals are an &lt;strong&gt;excellent&lt;/strong&gt; way to improve user interfaces. &lt;/p&gt;

&lt;p&gt;A modal is a screen that shows &lt;em&gt;atop&lt;/em&gt; another screen to draw the user's &lt;strong&gt;attention to important information&lt;/strong&gt; or to move them to the next stage in a process. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/react-native-modal"&gt;react-native-modal&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---BeGHGnV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0c6sns5tyd06knw87xd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---BeGHGnV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0c6sns5tyd06knw87xd3.png" alt="Image description" width="644" height="680"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  react-native-elements
&lt;/h3&gt;

&lt;p&gt;The concept behind React Native Elements is that it's more about &lt;em&gt;component structure&lt;/em&gt; than real design.&lt;/p&gt;

&lt;p&gt;This means less &lt;strong&gt;boilerplate&lt;/strong&gt; in putting up specific elements but &lt;em&gt;complete design control&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://reactnativeelements.com/docs/next/"&gt;react-native-elements&lt;/a&gt;&lt;/p&gt;

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




&lt;h3&gt;
  
  
  lottie-react-native
&lt;/h3&gt;

&lt;p&gt;Lottie is a &lt;em&gt;free&lt;/em&gt; and &lt;em&gt;open-source&lt;/em&gt; animation library.&lt;/p&gt;

&lt;p&gt;Lottie-based files are less in size, yet they are still high-quality.&lt;/p&gt;

&lt;p&gt;Lottie is used by the most popular mobile applications to give their users a better visual experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/lottie-react-native"&gt;lottie-react-native&lt;/a&gt;&lt;/p&gt;

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




&lt;h3&gt;
  
  
  react-native-svg
&lt;/h3&gt;

&lt;p&gt;Now, the simplest method is to simply extract the.png or.jpeg file. This will work for you, but you won't get crisp quality and your app will get bloated.&lt;/p&gt;

&lt;p&gt;Instead of using those, you should use the SVG format.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/react-native-svg"&gt;react-native-svg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YGWVPg-j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d7fonu3ty1dgd9w25rg9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YGWVPg-j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d7fonu3ty1dgd9w25rg9.png" alt="Image description" width="680" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>npm</category>
      <category>reactnative</category>
      <category>beginners</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Using Flex like a Pro</title>
      <dc:creator>Sumrit Grover</dc:creator>
      <pubDate>Thu, 09 Dec 2021 09:01:16 +0000</pubDate>
      <link>https://dev.to/grover_sumrit/using-flex-like-a-pro-5cm3</link>
      <guid>https://dev.to/grover_sumrit/using-flex-like-a-pro-5cm3</guid>
      <description>&lt;h3&gt;
  
  
  Flex defines how much that view would fill the screen.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Space would be divided according to the flex property of each element.
&lt;/h3&gt;

&lt;p&gt;In the following example, the container view has flex: 1. &lt;/p&gt;

&lt;p&gt;The red view has flex: 1, the yellow view has flex: 2, and the green view has flex: 3. &lt;/p&gt;

&lt;p&gt;1+2+3 = 6, which means that the red view will get 1/6 of the space, the yellow 2/6 of the space, and the green 3/6 of the space.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zHS3xPn2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l50svdkr2xcdhtywamkv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zHS3xPn2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l50svdkr2xcdhtywamkv.png" alt="Image description" width="880" height="342"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5eYrKk2j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zljxfy2i3f2483rii7jo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5eYrKk2j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zljxfy2i3f2483rii7jo.png" alt="Image description" width="150" height="261"&gt;&lt;/a&gt;&lt;/p&gt;







&lt;h3&gt;
  
  
  FlexDirection
&lt;/h3&gt;

&lt;p&gt;It is the property which defines the direction in which the child components are laid out. &lt;/p&gt;




&lt;h4&gt;
  
  
  FlexDirection -"Row"
&lt;/h4&gt;

&lt;p&gt;Align children from left to right.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V5mLrjdD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0rslipmcpbcpsrcq61ue.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V5mLrjdD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0rslipmcpbcpsrcq61ue.png" alt="Image description" width="880" height="378"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2QzkvYMb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jffvkj8zua1wqrhq0235.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2QzkvYMb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jffvkj8zua1wqrhq0235.png" alt="Image description" width="198" height="37"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  FlexDirection - Column(default)
&lt;/h4&gt;

&lt;p&gt;Align children from top to bottom.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--x-VvUtzn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wmezglyz9i0ns4yw2rj1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--x-VvUtzn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wmezglyz9i0ns4yw2rj1.png" alt="Image description" width="880" height="393"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JKsjz_vR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jqk6wtvkeq2prfhv9asr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JKsjz_vR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jqk6wtvkeq2prfhv9asr.png" alt="Image description" width="232" height="114"&gt;&lt;/a&gt;&lt;/p&gt;







&lt;blockquote&gt;
&lt;p&gt;Web development has tons of different layout techniques and &amp;gt;tricks available. While in React Native your best tool for &amp;gt;building layouts be will be Flexbox.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;DISCLAIMER&lt;/strong&gt;&lt;br&gt;
Flexbox in React Native is a bit different from &lt;em&gt;CSS Flexbox&lt;/em&gt;. Differences are subtle but they are still there.&lt;/p&gt;

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