<?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: Daniel Pescador</title>
    <description>The latest articles on Forem by Daniel Pescador (@thremulant).</description>
    <link>https://forem.com/thremulant</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%2F769549%2F32e7293c-13a2-4383-b059-8334c4afe776.jpeg</url>
      <title>Forem: Daniel Pescador</title>
      <link>https://forem.com/thremulant</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/thremulant"/>
    <language>en</language>
    <item>
      <title>What level of React are you in?</title>
      <dc:creator>Daniel Pescador</dc:creator>
      <pubDate>Tue, 24 May 2022 05:23:49 +0000</pubDate>
      <link>https://forem.com/thremulant/what-level-of-react-are-you-in-46g</link>
      <guid>https://forem.com/thremulant/what-level-of-react-are-you-in-46g</guid>
      <description>&lt;p&gt;Hey there! &lt;/p&gt;

&lt;p&gt;I was trying to figure out &lt;strong&gt;where do I stand from a React learning perspective?&lt;/strong&gt; to set my next learning goal. But I couldn't find anything specific to where to draw the line between a beginner, intermediate and an advanced React developer. &lt;/p&gt;

&lt;p&gt;So, I made a list of topics related to React and some other stuff I'd like to learn, then grouped them into those three categories. These topics are not 100% React. Those fall into foundation topics that you need or libraries/tools that you will face at any point in your career.   &lt;/p&gt;

&lt;p&gt;For the grouping part, I thought: "If I wanted to learn from scratch React today, what would be the order I'd need them?" With that in mind, this is the list I came up with:&lt;/p&gt;

&lt;h4&gt;
  
  
  Beginner:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Basic HTML and CSS knowledge&lt;/li&gt;
&lt;li&gt;CRA setup&lt;/li&gt;
&lt;li&gt;Basic JSX syntax&lt;/li&gt;
&lt;li&gt;Component creation (functional and class components)&lt;/li&gt;
&lt;li&gt;Props and Children&lt;/li&gt;
&lt;li&gt;State (useState and useEffect hooks)&lt;/li&gt;
&lt;li&gt;Conditional render&lt;/li&gt;
&lt;li&gt;Router&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Intermediate:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Lifecycle methods&lt;/li&gt;
&lt;li&gt;Error boundary &lt;/li&gt;
&lt;li&gt;Using one state management library (Context, Redux, Zustand, etc.)&lt;/li&gt;
&lt;li&gt;More state (useMemo and useCallback hooks)&lt;/li&gt;
&lt;li&gt;Controlled and Uncontrolled components&lt;/li&gt;
&lt;li&gt;Typescript&lt;/li&gt;
&lt;li&gt;Testing components (React Testing Library, Jest or both) &lt;/li&gt;
&lt;li&gt;Adding a CSS Framework (TailwindCSS)&lt;/li&gt;
&lt;li&gt;Customizing component styles (SASS, Styled-Components or JSS)&lt;/li&gt;
&lt;li&gt;Bundler configuration (Webpack)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Advance:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Create your custom hooks&lt;/li&gt;
&lt;li&gt;Storybook &lt;/li&gt;
&lt;li&gt;React Suspense and Lazy&lt;/li&gt;
&lt;li&gt;Mocking services for tests purposes (like overwriting the render to add a ThemeProvider - React Testing Library) &lt;/li&gt;
&lt;li&gt;Server-side rendering&lt;/li&gt;
&lt;li&gt;Rewiring React &lt;/li&gt;
&lt;li&gt;Frameworks like NextJS or Gatsby&lt;/li&gt;
&lt;li&gt;Creating your own component's library&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After creating this initial list, I gave them a score. Mostly because their learning difficulty is different. It's not the same to learn how to pass props to a component, as learning how to implement Redux! Also because I thought it would be cool to have a small app that will do this for us! And that's how I ended up creating this!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://react-knowledge-checker.overlapweb.com/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iOjlNYc9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s7zq116f1eb8kdj63d8i.jpg" alt="Image description" width="880" height="440"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="http://react-knowledge-checker.overlapweb.com/"&gt;React Knowledge Check&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please, be aware that this list comes from my own experience working on different companies as a React developer, and is probably (if not extremely) incomplete. If you guys have any suggestions, let me know what topics you'd like to see reflected in the list. &lt;/p&gt;

&lt;h4&gt;
  
  
  What was purpose of this, again? right! the goal:
&lt;/h4&gt;

&lt;p&gt;It's going to be &lt;strong&gt;Suspense and Lazy!&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/danielp"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wB_Xyv1y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jb0y5eujn1hatc1r5f0w.png" alt="Image description" width="250" height="70"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>beginners</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Creating an expandable profile card</title>
      <dc:creator>Daniel Pescador</dc:creator>
      <pubDate>Sat, 14 May 2022 05:15:50 +0000</pubDate>
      <link>https://forem.com/thremulant/creating-an-expandable-profile-card-hpa</link>
      <guid>https://forem.com/thremulant/creating-an-expandable-profile-card-hpa</guid>
      <description>&lt;p&gt;Hey there! &lt;/p&gt;

&lt;p&gt;Last month, I was assigned to create an expandable component at work, something that could be repeatable, and it should show/hide more data on click. Something easy to achieve by using hooks, the old show and hide game! But, my inner designer couldn't resist the temptation of animating it. And now, I'll just show you how the results!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iy4tcxC2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mwa4abx7vt0mpdkz99j3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iy4tcxC2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mwa4abx7vt0mpdkz99j3.jpg" alt="Profile card concept designed by Thremulant" width="880" height="660"&gt;&lt;/a&gt;Design by &lt;a href="https://dribbble.com/shots/18148247-Profile-card"&gt;Thremulant&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's begin!
&lt;/h2&gt;

&lt;p&gt;The first step is the setup. This is the stack I used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create-React-App&lt;/li&gt;
&lt;li&gt;Typescript&lt;/li&gt;
&lt;li&gt;TailwindCSS&lt;/li&gt;
&lt;li&gt;Framer-Motion (Animations)&lt;/li&gt;
&lt;li&gt;Poppins Font&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Highlighted code
&lt;/h2&gt;

&lt;p&gt;The component is not complicated, although there are some parts that need to be clarified:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;AnimatePrescence&lt;/code&gt; it's wrapping only the bottom content of the card. The reason is that those are  the only pieces that are unmounted. &lt;/li&gt;
&lt;li&gt;Components like this one, are the reason why I prefer to use &lt;code&gt;await&lt;/code&gt;  instead of using &lt;code&gt;then&lt;/code&gt;. Nesting all the animations will be a &lt;strong&gt;living hell!!&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bottomTexts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;close&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bottomButtons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;close&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bottomContainerControls&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;close&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;There are &lt;code&gt;timeouts&lt;/code&gt; in the open and close functions. The reason is to avoid some animation issues while changing the &lt;code&gt;flex-direction&lt;/code&gt;. Without them, the image's width will only grow to a third of the card, stop, and then re-start the animation to get the full width.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The result
&lt;/h2&gt;

&lt;p&gt;Here's the full solution. Feel free to fork and work on it!&lt;br&gt;
&lt;iframe src="https://codesandbox.io/embed/2uve4n"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>tutorial</category>
      <category>typescript</category>
    </item>
    <item>
      <title>What's an acceptable time to develop a landing page in React?</title>
      <dc:creator>Daniel Pescador</dc:creator>
      <pubDate>Sun, 01 May 2022 05:16:04 +0000</pubDate>
      <link>https://forem.com/thremulant/whats-an-acceptable-time-to-develop-a-landing-page-in-react-1217</link>
      <guid>https://forem.com/thremulant/whats-an-acceptable-time-to-develop-a-landing-page-in-react-1217</guid>
      <description></description>
      <category>javascript</category>
      <category>react</category>
      <category>codenewbie</category>
      <category>time</category>
    </item>
  </channel>
</rss>
