<?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: Rohan Salunke</title>
    <description>The latest articles on Forem by Rohan Salunke (@okrohan).</description>
    <link>https://forem.com/okrohan</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%2F263959%2F3e9c1db8-56df-4d4f-86be-71e7817ba5a6.png</url>
      <title>Forem: Rohan Salunke</title>
      <link>https://forem.com/okrohan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/okrohan"/>
    <language>en</language>
    <item>
      <title>A cleaner way to compose the sx prop (Material UI v5)</title>
      <dc:creator>Rohan Salunke</dc:creator>
      <pubDate>Sat, 25 Dec 2021 13:03:13 +0000</pubDate>
      <link>https://forem.com/okrohan/a-cleaner-way-to-compose-the-sx-prop-material-ui-v5-4ko7</link>
      <guid>https://forem.com/okrohan/a-cleaner-way-to-compose-the-sx-prop-material-ui-v5-4ko7</guid>
      <description>&lt;p&gt;Material UI v5 recently released their new design system &lt;a href="https://mui.com/system/the-sx-prop/" rel="noopener noreferrer"&gt;the Sx prop&lt;/a&gt;. The property includes style properties from CSS and @mui/system. Taking the MUI styling system to the next level. Personally I loved the new style engine from Material UI v5, enabling me to build Web Apps totally using the Material UI's ecosystem. Being used to the clean method of composing CSS classes using &lt;a href="https://www.npmjs.com/package/classnames" rel="noopener noreferrer"&gt;classnames&lt;/a&gt; package, I found composing and conditionally chaing the &lt;code&gt;sx&lt;/code&gt; props a bit unclean.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Feature
&lt;/h2&gt;

&lt;p&gt;If you're totally new to mui v5, Let's first look at what exactly is sx props. &lt;code&gt;sx&lt;/code&gt; prop is prop used in MuiV5 design system, that leverages mui shorthands and native css properties to provide a good styling experience. Below is a basic example of its usage.&lt;/p&gt;

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

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Box&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="s2"&gt;@mui/material&lt;/span&gt;&lt;span class="dl"&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Box&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;App&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;mui&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;sx&lt;/span&gt; &lt;span class="nx"&gt;demo&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Box&lt;/span&gt;
        &lt;span class="c1"&gt;// Passing Sx Prop Here&lt;/span&gt;
        &lt;span class="nx"&gt;sx&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;
          &lt;span class="na"&gt;mt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;yellow&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="p"&gt;}}&lt;/span&gt;
      &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Box&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/basic-sx-u23oj"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;As seen, sx prop is a JS object comprising of sx properties i.e mui short hands and native css props.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Being a JS object, using the sx prop across the markdown might look unclean. There might be usecases where you'd want to reuse some styling or apply conditionally styling.&lt;br&gt;
Lets look at another example where in you need to conditionally color an element based on React state, also enforce modular styling pattern to ensure better reusability.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Button&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="s2"&gt;@mui/material&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Box&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Stack&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="s2"&gt;@mui/material&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;sxBox&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;100%&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&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;sxBordered&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&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;sxNight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#000&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;sxDay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;yellow&lt;/span&gt;&lt;span class="dl"&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&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;isDay&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setDay&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&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="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Stack&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;App&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;spacing&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;mui&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;sx&lt;/span&gt; &lt;span class="nx"&gt;demo&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&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="nx"&gt;Click&lt;/span&gt; &lt;span class="nx"&gt;toggle&lt;/span&gt; &lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;below&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Box&lt;/span&gt;
          &lt;span class="nx"&gt;sx&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Follow are applied unconditionally&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;sxBox&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;sxBordered&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="p"&gt;...(&lt;/span&gt;&lt;span class="nx"&gt;isDay&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;sxNight&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
              &lt;span class="p"&gt;...(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isDay&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;sxDay&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="c1"&gt;// Follow sx applied when isDay === false&lt;/span&gt;
          &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;contained&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setDay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isDay&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nx"&gt;Toggle&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Stack&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;



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

&lt;/div&gt;
&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/mui-sx-ps-pokns"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;As seen in the sandbox, one might need lots of spread operators &lt;code&gt;(...)&lt;/code&gt; and ternary conditions to implement composition of the sx prop. If you have worked on huge projects with modular css patterns, scaling above might get ugly.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;This is where &lt;a href="https://www.npmjs.com/package/mui-sx" rel="noopener noreferrer"&gt;mui-sx&lt;/a&gt; comes to rescue. Its a tiny JS library based off &lt;a href="https://www.npmjs.com/package/classnames" rel="noopener noreferrer"&gt;classnames&lt;/a&gt;, that helps elegantly compse the sx prop. Let's look at the above example written using &lt;code&gt;mui-sx&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;sx&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mui-sx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Button&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="s2"&gt;@mui/material&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Box&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Stack&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="s2"&gt;@mui/material&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;sxBox&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;100%&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&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;sxBordered&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&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;sxNight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#000&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;sxDay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;yellow&lt;/span&gt;&lt;span class="dl"&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&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;isDay&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setDay&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&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="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Stack&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;App&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;spacing&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;mui&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;sx&lt;/span&gt; &lt;span class="nx"&gt;demo&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&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="nx"&gt;Click&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;toggle&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Box&lt;/span&gt;
          &lt;span class="nx"&gt;sx&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;sx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="c1"&gt;// Follow are applied unconditionally&lt;/span&gt;
            &lt;span class="nx"&gt;sxBox&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nx"&gt;sxBordered&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="c1"&gt;// Follow sx applied when isDay === true&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;isDay&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="na"&gt;sx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;sxDay&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="c1"&gt;// Follow sx applied when isDay === false&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isDay&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="na"&gt;sx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;sxNight&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
          &lt;span class="p"&gt;)}&lt;/span&gt;
        &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;contained&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setDay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isDay&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nx"&gt;Toggle&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Stack&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


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

&lt;/div&gt;
&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/sx-compose-example-z0mki"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Much Cleaner! The syntax is very close to &lt;a href="https://www.npmjs.com/package/classnames" rel="noopener noreferrer"&gt;classnames&lt;/a&gt; and if you are someone that has been using &lt;a href="https://www.npmjs.com/package/classnames" rel="noopener noreferrer"&gt;classnames&lt;/a&gt; for a while then you might enjoy using &lt;a href="https://www.npmjs.com/package/mui-sx" rel="noopener noreferrer"&gt;mui-sx&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Link to the NPM Package: &lt;a href="https://www.npmjs.com/package/mui-sx" rel="noopener noreferrer"&gt;mui-sx&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Hope that was helpful 😇&lt;/strong&gt;&lt;br&gt;
If you have any questions/confusions/suggestions/corrections, Please do post down in the comments section below.&lt;/p&gt;

&lt;p&gt;Rohan Salunke (&lt;a href="https://okrohan.bio.link/" rel="noopener noreferrer"&gt;https://okrohan.bio.link/&lt;/a&gt;)&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__263959"&gt;
    &lt;a href="/okrohan" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&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%2Fuser%2Fprofile_image%2F263959%2F3e9c1db8-56df-4d4f-86be-71e7817ba5a6.png" alt="okrohan image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/okrohan"&gt;Rohan Salunke&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/okrohan"&gt;Passionate Engineer😎
JS Evangelist❤
Microfrontends Microservices System Design&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;






</description>
    </item>
    <item>
      <title>Javascript: The 'this' keyword [context] cheatsheet</title>
      <dc:creator>Rohan Salunke</dc:creator>
      <pubDate>Mon, 25 Jan 2021 05:57:02 +0000</pubDate>
      <link>https://forem.com/okrohan/javascript-the-this-keyword-context-cheatsheet-2361</link>
      <guid>https://forem.com/okrohan/javascript-the-this-keyword-context-cheatsheet-2361</guid>
      <description>&lt;p&gt;&lt;strong&gt;Javascript context&lt;/strong&gt; i.e the &lt;strong&gt;'this'&lt;/strong&gt; keyword is quite a confusing topic in itself. Although, being very simple and semantic, it has been easy for me to forget the rules around context. With further ado, Let me introduce the cheatsheet for &lt;strong&gt;the infamous 'this' keyword!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Quick side note: This article is intended as a cheatsheet around JS context, It does not serve as a verbose explanation of the concept. If you are beginner and have not explored the 'context' concept yet, I highly recommend you to read this&lt;/code&gt; &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this"&gt;MDN doc&lt;/a&gt; &lt;code&gt;first &lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Cheatsheet:
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Use case&lt;/th&gt;
&lt;th&gt;this&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;th colspan="3"&gt;Normal Functions&lt;/th&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Invoked directly&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;window&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;
&lt;pre&gt;
 fn() 
 // this -&amp;gt; window
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;b&gt; Invoked from object&lt;br&gt;[Implicit Binding]
 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; Invoking object &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;
&lt;pre&gt;
obj.fn()
// this -&amp;gt; obj
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt; Explicit Binding&lt;br&gt;(bind, call, apply)
 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; Passed reference
 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;
&lt;pre&gt;
// --- .call .apply --- //
obj.fn.call(otherObj)
// this -&amp;gt; otherObj
&lt;br&gt;
// --- .bind --- //
const boundFn = obj.fn.bind(otherObj)
boundFn()
// this -&amp;gt; otherObj
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Invoked in
&lt;br&gt;strict mode
&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;undefined &lt;br&gt;[[ If this-&amp;gt;window ]]&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;
&lt;pre&gt;
'use strict'
fn()
// this -&amp;gt; undefined

window.globalFn = fn
window.globalFn()
// this -&amp;gt; undefined

obj.fn.call(window)
// this -&amp;gt; undefined
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;th colspan="3"&gt;Arrow Functions&lt;/th&gt;
&lt;tr&gt;
&lt;td colspan="3"&gt;
&lt;br&gt;&lt;b&gt;Instantiation context:&lt;/b&gt; 
The value of 'this'[Context] when an object instance is created using a constructor.

&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt; Invoked &lt;br&gt;
[directly OR from object] &lt;br&gt;
 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; Instantiation context
 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;
&lt;pre&gt;
// ----- direct invocation ---- //
// Instantiation context: window
const fn = () =&amp;gt; console.log(this)
fn() 
// this -&amp;gt; window

// ----- invocation from obj [class instance] ---- //
function myClass(){
 this.fn = () =&amp;gt; console.log(this)
}
-- OR --
class myClass {
 constructor(){
  this.fn = () =&amp;gt; console.log(this)
 }
}
// Instantiation context: obj1
const obj1 = new myClass() 
obj1.fn()
// this -&amp;gt; obj1


// ----- invocation from obj ---- //
// Instantiation context: window
const obj2 = { fn: () =&amp;gt; console.log(this) }
obj2.fn()
// this -&amp;gt; window
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt; Explicit Binding &lt;br&gt;(bind, call, apply)
 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; Instantiation context &lt;br&gt;
[No Effect] &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;
&lt;pre&gt;
obj.fn.call(otherObj)
// this -&amp;gt; window

instance.fn.call(otherObj)
// this -&amp;gt; instance
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;b&gt; Invoked &lt;br&gt;
in strict mode 

 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt; undefined &lt;br&gt;
[[ if this -&amp;gt; window ]] &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;
&lt;pre&gt;
'use strict'
fn()
// this -&amp;gt; undefined
&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Some simple examples🤥:
&lt;/h2&gt;

&lt;pre&gt;
 const fn = function(){
  console.log(this)
 }
 
 const obj = { 
  fn1: fn,
  fn2: function() {
   fn()
  },
  fn3: function(){
   this.fn1()
  },
  fn4: fn.bind(obj),
  fn5: function(){
   this.fn1.call(obj)
  }
 }
 
 obj.fn1()
 // log: obj 
 // as 'fn1' was invoked via the obj object

 obj.fn2()
 // log: window
 // as 'fn2' was invoked via the obj, but
 // the inner 'fn' was invoked directly 

 obj.fn3()
 // log: obj
 // fn3 was invoked via the obj, 'this' pointed to the
 // 'obj'. As 'this' -&amp;gt; obj, the inner execution
 // [this.fn()] is as good 
 // as obj.fn1()

 obj.fn4()
 // log: obj
 // Explicit context binding ;)

 obj.fn5()
 // log: obj
 // hope you're getting a hang of it :P
&lt;/pre&gt;

&lt;h2&gt;
  
  
  Some more simple examples 🤥🤥🤥:
&lt;/h2&gt;

&lt;pre&gt;

 function fnConstructor(){
  const fn = () =&amp;gt; console.log(this)
  this.fn1 = () =&amp;gt; console.log(this),
  this.fn2 = function(){
   console.log(this)
  }
  this.fn3 = fn,
  this.fn4 = function(){
   fn()
  }
  this.innerObj = { fn }
 }

 const obj = new fnConstructor()
 const obj2 = {
  obFn1: obj.fn1,
  obFn2: () =&amp;gt; console.log(this)
 }

 obj.fn1()
 // log: obj (Instantiation context!)
 
 obj.fn2()
 // log: obj (Duhh^^)

 obj.fn3()
 // log: window ;)
 
 obj.fn4()
 // log: obj (Instantiation context!) 

 obj.innerObj.fn()
 // log: obj (Instantiation context!!) 

 obj2.obFn1()
 // log: obj (Instantiation context!!!)

 obj2.obFn2()
 // log: window ;) 
&lt;/pre&gt;




&lt;p&gt;&lt;a href="https://i.giphy.com/media/iPiUxztIL4Sl2/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/iPiUxztIL4Sl2/giphy.gif"&gt;&lt;/a&gt;&lt;br&gt;
&lt;b&gt;Hope that was helpful 😇 &lt;/b&gt;&lt;br&gt;
If you have any questions/confusions/suggestions/corrections, Please do post down in the comments section below.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Rohan Salunke&lt;/b&gt;: &lt;a href="https://www.linkedin.com/in/rohan-salunke/"&gt;LinkedIn&lt;/a&gt; &lt;a href="https://twitter.com/ROHANSA09177528"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Don't be one of these React Devs🙄</title>
      <dc:creator>Rohan Salunke</dc:creator>
      <pubDate>Sun, 10 Nov 2019 17:41:21 +0000</pubDate>
      <link>https://forem.com/okrohan/don-t-be-one-of-these-react-devs-3b46</link>
      <guid>https://forem.com/okrohan/don-t-be-one-of-these-react-devs-3b46</guid>
      <description>&lt;p&gt;I have been working with React for a couple of years now and I have seen stupid practices that developers do while working on a React App. In this article, I will list some of these stupid stereotypes and try to explain why they are wrong.&lt;br&gt;
Without wasting time lets start judging😋&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The one that knows React but not JavaScript:&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sometimes people ignore learning JS and rush into React.&lt;/li&gt;
&lt;li&gt;Remember💡, React is a JS library and you have to make sure you are thorough with it. One step at a time does help.&lt;/li&gt;
&lt;li&gt;I would recommend learning these JS concepts and some DOM APIs mentioned in this &lt;a href="https://github.com/leonardomso/33-js-concepts"&gt;comprehensive list&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The one who Uses JQuery with React:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/W08g7o5V6Dk6ru1q9y/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/W08g7o5V6Dk6ru1q9y/giphy.gif" alt="React+JQuery == Pineapple+Pizza"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I have seen a bunch of people using JQuery along with React for DOM manipulations😑.&lt;/li&gt;
&lt;li&gt;It's just pointless, React's main goal is to handle all the DOM changes.&lt;/li&gt;
&lt;li&gt;All you have to do is update the state, render the VDOM and React will take care of all the DOM changes.&lt;/li&gt;
&lt;li&gt;If you used JQuery and React together, then you should expect some bugs that are hard to debug🙈 as both libraries might update DOM elements at the same time.&lt;/li&gt;
&lt;li&gt;Still, If you'd like to continue using JQuery here's a &lt;a href="https://reactjs.org/docs/integrating-with-other-libraries.html"&gt;guide integrating it the right way&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The one who complains that React Apps lag&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React technically is blazing fast, but everything can become slow if implemented the wrong way😏.&lt;/li&gt;
&lt;li&gt;Think of it, React takes care of all the DOM manipulations. To achieve it, it needs to compare the whole DOM tree and update it, which is a very tedious task🥴.&lt;/li&gt;
&lt;li&gt;The more the number of DOM elements in your App, the slower the APP will be.&lt;/li&gt;
&lt;li&gt;Team React has been doing their part of keeping React performant as possible. &lt;a href="https://www.freecodecamp.org/news/lets-fall-in-love-with-react-fiber-90f2e1f68ded/"&gt;React Fiber&lt;/a&gt; was a major change!.&lt;/li&gt;
&lt;li&gt;But as a developer you have to do your part right, &lt;a href="https://reactjs.org/docs/optimizing-performance.html"&gt;here's a guide to optimize application performance&lt;/a&gt;. 'Avoiding Reconciliation' is one of my favorites🤩.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Mr. LibOverflow😷&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/3ohs7LtFnEznzAIzvO/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/3ohs7LtFnEznzAIzvO/giphy.gif" alt="Mr. LibOverflow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;These are the guys that just try to get around writing code&lt;/li&gt;
&lt;li&gt;They will use tonnes of component libraries just to get their task done.&lt;/li&gt;
&lt;li&gt;Adding too many packages to your app can increase the overall build size.&lt;/li&gt;
&lt;li&gt;You should keep track of the build size, or else the initial app loading would be slow🐢.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/webpack-bundle-analyzer"&gt;Webpack bundle analyzer&lt;/a&gt; should help you analyze which package you should be ripping off.&lt;/li&gt;
&lt;li&gt;Also external packages are like Magic in your code. Nobody reads how they are working.&lt;/li&gt;
&lt;li&gt;At times they might blow up and you might not understand what happened, KEEP THE MAGIC TO MINUMUM, KNOW YOUR CODE!🤓&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The one that thinks Redux is must&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You need to understand that React is a View Library💡.&lt;/li&gt;
&lt;li&gt;How you manage your state is none of its concern.&lt;/li&gt;
&lt;li&gt;I don't suggest Redux to beginners, as the learning curve gets steep.&lt;/li&gt;
&lt;li&gt;There are tonnes of other state management solutions out there, each with their pros and cons.&lt;/li&gt;
&lt;li&gt;Or you can just simply use React &lt;a href="https://medium.com/simply/state-management-with-react-hooks-and-context-api-at-10-lines-of-code-baf6be8302c"&gt;hooks&lt;/a&gt; and &lt;a href="https://itnext.io/react-context-and-state-management-16ed76686803"&gt;context&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you are using GraphQL, I would suggest &lt;a href="https://github.com/apollographql/react-apollo"&gt;Apollo&lt;/a&gt;. I liked their caching algorithm.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MUKsVi8---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.app.goo.gl/YmZgDERQ8xFQHn7t5" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MUKsVi8---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.app.goo.gl/YmZgDERQ8xFQHn7t5" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you for reading, I hope you liked this post😄. I'd love to hear your thoughts on this, so please feel free to comment!&lt;/p&gt;

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