<?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: Let's Code</title>
    <description>The latest articles on DEV Community by Let's Code (@frontendengineer).</description>
    <link>https://dev.to/frontendengineer</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%2F164312%2F3b604a67-e1dc-4dd2-8c2b-a1db73b77b32.png</url>
      <title>DEV Community: Let's Code</title>
      <link>https://dev.to/frontendengineer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/frontendengineer"/>
    <language>en</language>
    <item>
      <title>Free Online Storybook Conference 2023 ️‍🔥</title>
      <dc:creator>Let's Code</dc:creator>
      <pubDate>Wed, 08 Feb 2023 23:52:29 +0000</pubDate>
      <link>https://dev.to/frontendengineer/free-online-storybook-conference-2023-4eh0</link>
      <guid>https://dev.to/frontendengineer/free-online-storybook-conference-2023-4eh0</guid>
      <description>&lt;p&gt;On &lt;em&gt;March 14, 2023&lt;/em&gt;, Storybook will host their very first conference 🥳 and this is exciting because you can learn timesaving workflows 💪 and get an overview of trending projects in the storybook community. &lt;/p&gt;

&lt;p&gt;They will announce and discuss their latest version 7. This version is their first version in two years which the team have rearchitected for speed 🏃, performance ⌛, and stability 👍. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fa57cures6wkqm2y39k2d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fa57cures6wkqm2y39k2d.png" alt="Version 7" width="800" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some of the exciting changes are the following:&lt;/p&gt;

&lt;p&gt;💅 Design refresh&lt;br&gt;
🏎️ Performance overhaul&lt;br&gt;
📝 Docs revamp with MDX 2&lt;br&gt;
🕹️ Interaction testing&lt;br&gt;
🚥 Test runner powered by Jest&lt;br&gt;
📈 Test coverage to generate lcov reports&lt;br&gt;
🧩 Framework API for zero-config&lt;br&gt;
🔖 Component Story Format 3.0 is default&lt;br&gt;
⚡ Vite support (supports latest version v4)&lt;br&gt;
✅ TypeScript just works (supports latest version 4.9)&lt;br&gt;
🎨 Figma integration sneak peek&lt;br&gt;
▲ NextJS auto-config&lt;br&gt;
🦾 SvelteKit auto-config&lt;/p&gt;

&lt;p&gt;There are hundreds more improvements other than these and you can check them out &lt;a href="https://github.com/storybookjs/storybook/blob/HEAD/CHANGELOG.md" rel="noopener noreferrer"&gt;here&lt;/a&gt; if you have the time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Storybook?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you do you not know what Storybook is this is a tool to help you build UI components and pages in isolation. This gives you the power not to worry about data 🗂️, APIs or any business logic and as a developer you would know how this might be tricky or difficult this is to setup. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who uses Storybook?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thousands of teams already uses Storybook for development, testing, and documentation which includes big and leading companies like Github, Microsoft, Adobe, Wordpress and along with others and this list is expected to eventually grow more in the future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to sign up?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can sign up now and get your ticket to join the online conference. The best thing of this all is that it is free. Here is the (link)[&lt;a href="https://storybook.js.org/day" rel="noopener noreferrer"&gt;https://storybook.js.org/day&lt;/a&gt;]. All that is required is to drop an email 📧 and you are in.   &lt;/p&gt;

&lt;p&gt;I hope to see you on the event. 👋 &lt;/p&gt;

&lt;p&gt;Here is the video version if it is a medium of your preference:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/7WLeUratQhk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Check out my other popular blog post:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/frontendengineer/10-reactjs-coding-exercises-with-codepen-exercise-and-solution--22k7"&gt;10 ReactJS Coding Challenge&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/frontendengineer/reactjs-tic-tac-toe-passed-job-interview-1od8"&gt;ReactJS Tic-Tac-Toe (💥Passed Job Interview💥)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/frontendengineer/top-10-javascript-interview-questions-and-answers-you-should-know-junior-and-senior-3943"&gt;JavaScript Interview Questions and Answers you should know - Junior and Senior&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>productivity</category>
    </item>
    <item>
      <title>CSS Interview Question: Center HTML Element (3 Approaches💥)</title>
      <dc:creator>Let's Code</dc:creator>
      <pubDate>Tue, 19 Apr 2022 15:07:29 +0000</pubDate>
      <link>https://dev.to/frontendengineer/css-interview-question-center-html-element-3-approaches-58h5</link>
      <guid>https://dev.to/frontendengineer/css-interview-question-center-html-element-3-approaches-58h5</guid>
      <description>&lt;p&gt;You get asked a question ❓ or is challenged to write code to &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Center a div vertically and horizontally OR How to perfectly center an element in a browser?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How would you answer? 🤔 Below are three possible ways to do it. My recommendation all the way below. Given HTML markup that looks like below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"parent"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"child"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Approach #1: CSS Translate/Transform&lt;/strong&gt;&lt;br&gt;
This is an approach that have a better browser 🌏 support than both CSS Flexbox and Grid. Code may look like below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.parent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.child&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-50%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;-50%&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;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%2F54kwhqpyxoqtejv4bwyx.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%2F54kwhqpyxoqtejv4bwyx.png" alt="CSS Translate/Transform Browser Support Image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Codepen: &lt;a href="https://codepen.io/angelo_jin/pen/popONyX" rel="noopener noreferrer"&gt;https://codepen.io/angelo_jin/pen/popONyX&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: All implementation will look like below&lt;/p&gt;
&lt;/blockquote&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%2Foqd4thnnv3kkyam4ugq2.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%2Foqd4thnnv3kkyam4ugq2.png" alt="Vertically and Horizontally Centered HTML Element"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Approach #2: CSS Flexbox&lt;/strong&gt;&lt;br&gt;
This solution have a better browser support than css grid and ideal for those browsers can support the feature. It is great for creating 1 dimension layout which aims at providing a more efficient way to align and distribute space among items in a container. Can even center when their size is unknown and/or dynamic. 😲&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.parent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&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;Codepen: &lt;a href="https://codepen.io/angelo_jin/pen/QWaVGGP" rel="noopener noreferrer"&gt;https://codepen.io/angelo_jin/pen/QWaVGGP&lt;/a&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%2Fe196a5nk682me7r7wmlr.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%2Fe196a5nk682me7r7wmlr.png" alt="CSS Flexbox Browser Support Image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Approach #3: CSS Grid&lt;/strong&gt;&lt;br&gt;
This ruleset is ideal because we are not on the 90's anymore, few lines of style we have to add that completely changes the way we design user interface.😊 CSS Grid Layout excels at dividing a page into major regions or defining the relationship in terms of size, position, and layer, between parts of a control built from HTML primitives.&lt;/p&gt;

&lt;p&gt;If you are going to use this on your interview, mention that you would use this solution if browser can support it. This would show that you are paying attention with the latest and greatest css specs and is not tied up with the old way of doing things.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;CSS&lt;/span&gt; &lt;span class="nt"&gt;Grid&lt;/span&gt;
&lt;span class="nc"&gt;.parent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;place-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&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;Codepen: &lt;a href="https://codepen.io/angelo_jin/pen/qBpMqRr" rel="noopener noreferrer"&gt;https://codepen.io/angelo_jin/pen/qBpMqRr&lt;/a&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%2Fn36j6hikl8rnfxbchbgs.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%2Fn36j6hikl8rnfxbchbgs.png" alt="CSS Grid Browser Support Image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Below is for medium for those who like video format:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/QPr8uBohiBM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Codepen Center Element Collection: &lt;a href="https://codepen.io/collection/MgJxRk" rel="noopener noreferrer"&gt;https://codepen.io/collection/MgJxRk&lt;/a&gt;&lt;br&gt;
(Great idea to bookmark for future use)&lt;/p&gt;

&lt;p&gt;A great front-end engineer focus his attention equally on CSS and JS, be well-rounded, and doesn't concentrate on one technology. For my recommendation on this question, I would use CSS Grid if browser is capable of supporting. If not, resort to CSS Flexbox then, CSS Translate would be the last choice.&lt;/p&gt;

</description>
      <category>css</category>
      <category>interview</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>CSS Interview Question: Create Responsive Design (1 Column / 3 Column)</title>
      <dc:creator>Let's Code</dc:creator>
      <pubDate>Mon, 11 Apr 2022 23:49:04 +0000</pubDate>
      <link>https://dev.to/frontendengineer/css-interview-question-create-responsive-design-1-column-3-column-264i</link>
      <guid>https://dev.to/frontendengineer/css-interview-question-create-responsive-design-1-column-3-column-264i</guid>
      <description>&lt;p&gt;I went on numerous job hunting 💼 this year and noticed that most of the interview questions revolve around javascript and it is totally understandable.😞 No CSS/HTML. &lt;/p&gt;

&lt;p&gt;Those other interviews that contain CSS technical questions 🤔, I was asked to write a responsive layout - 1 column for small screens and 3 columns for wider screens.&lt;/p&gt;

&lt;p&gt;Just like any given problems, there are many solutions to this question. Hopefully, you do not present the old way of doing things which is to use table, or float like below 🚫.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;CSS&lt;/span&gt; &lt;span class="nt"&gt;Float&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.column&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;33.33%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;left&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My recommendation would be either css flexbox or grid which would like below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;CSS&lt;/span&gt; &lt;span class="nt"&gt;Flexbox&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.columns&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;parent&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nc"&gt;.column&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;child&lt;/span&gt;
    &lt;span class="nl"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nt"&gt;CSS&lt;/span&gt; &lt;span class="nt"&gt;Grid&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.columns&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;parent&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nb"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;CSS is a skill that needed by every front-end developer/engineer although it is not the favorite skill. One should be able to write elegant and minimal CSS rules. &lt;/p&gt;

&lt;p&gt;What is your take on this? Should CSS questions or challenges still be asked on a front end interview or we can assume that engineer should know it as it is not a programming language?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Codepen:&lt;/strong&gt; &lt;a href="https://codepen.io/collection/pgbEQM"&gt;https://codepen.io/collection/pgbEQM&lt;/a&gt; (If you want to play around these three approaches)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For those who prefers video format&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/9irWj9SrQDE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>css</category>
      <category>show</category>
      <category>tutorial</category>
      <category>programming</category>
    </item>
    <item>
      <title>ReactJS Tic-Tac-Toe (💥Passed Job Interview💥)</title>
      <dc:creator>Let's Code</dc:creator>
      <pubDate>Sat, 19 Feb 2022 16:53:51 +0000</pubDate>
      <link>https://dev.to/frontendengineer/reactjs-tic-tac-toe-passed-job-interview-1od8</link>
      <guid>https://dev.to/frontendengineer/reactjs-tic-tac-toe-passed-job-interview-1od8</guid>
      <description>&lt;p&gt;Hello Everyone! I wanted to share my success on my previous job interview where I was asked to code a tic-tac-toe game in ReactJS and was able to pull it off landing a job offer. 🎉🥳 This is not the first time I was asked to code this game 🎮 but on different interviews as well. Other interviews was in plain vanilla JS.&lt;/p&gt;

&lt;p&gt;My recommended approach to solving this challenge is list 📙 the steps of how would you solve it (just like the video I have below) then code those step one by one. You will get credit 💯 even if you don't finish the game. In case you do not finish the challenge, just talk about how would you code the rest of the steps and you will most likely still be successful in the interview.&lt;/p&gt;

&lt;p&gt;Here is how I did it. I created two 2️⃣ components - Square and Board Component and a Helper Function to calculate the winner. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Square Component&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Square&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"square"&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Board Component&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Board&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;squares&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setSquares&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="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&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;isX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setIsX&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="nx"&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleClick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;calculateWinner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&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="nx"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;isX&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="nx"&gt;setSquares&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;setIsX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isX&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;winner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;calculateWinner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;status&lt;/span&gt;

  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;winner&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`Winner: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;winner&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Next player: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isX&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;O&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleRestart&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="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;setIsX&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="nx"&gt;setSquares&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;renderSquare&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Square&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&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="nx"&gt;handleClick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"board"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"board-row"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;renderSquare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;renderSquare&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="si"&gt;}&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;renderSquare&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="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"board-row"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;renderSquare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;renderSquare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;renderSquare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"board-row"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;renderSquare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;renderSquare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;renderSquare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"restart"&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleRestart&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Restart Game!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Helper Function To Calculate A Winner&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;calculateWinner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;winningPatterns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&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="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&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="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&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="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;

  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;winningPatterns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;winningPatterns&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;c&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="nx"&gt;squares&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&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;Below are some codepen links if you want to play around my solution. Also, a link to the exercise to avoid the setup and if you want to try it yourself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codepen.io/angelo_jin/pen/GROEdMK"&gt;Tic-Tac-Toe Codepen Solution&lt;/a&gt;&lt;br&gt;
&lt;a href="https://codepen.io/angelo_jin/pen/OJOmXWG"&gt;Tic-Tac-Toe Codepen Exercise&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts:&lt;/strong&gt;&lt;br&gt;
This interview challenge is tough but can be fun. It would refresh your knowledge with ReactJS concepts and fundamentals. It might even help you land your dream job if you get asked to do this challenge so it is a win-win and may be valuable to you.&lt;/p&gt;

&lt;p&gt;Feel free to bookmark 🔖 even if you don't need this for now. You may need to refresh/review down the road when it is time for you to look for a new role.&lt;/p&gt;

&lt;p&gt;Listing a collection of my previous ReactJS post if you need some help with a potential interview with this library.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/frontendengineer/common-react-interview-questions-50gm"&gt;Common React Interview Questions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/frontendengineer/react-interview-questions-part-2-mid-senior-level-cal"&gt;Advance React Interview Questions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/frontendengineer/10-reactjs-coding-exercises-with-codepen-exercise-and-solution--22k7"&gt;10 ReactJS Coding Challenge (💥Coding Interview Prep💥)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/w8V--ZBzh7w"&gt;
&lt;/iframe&gt;
 &lt;br&gt;
(&lt;em&gt;I created a 7-minutes video that is fast and painless to explain details step-by-step as I see other tutorials that is 20 minutes to 1 hour long which can be greatly condensed into something way smaller&lt;/em&gt;)&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>career</category>
      <category>showdev</category>
    </item>
    <item>
      <title>JS Coding Question #11: Are Two Object Equal (💥3 Solutions💥)</title>
      <dc:creator>Let's Code</dc:creator>
      <pubDate>Fri, 21 Jan 2022 06:59:54 +0000</pubDate>
      <link>https://dev.to/frontendengineer/js-coding-question-11-are-two-object-equal-3-solutions-56g4</link>
      <guid>https://dev.to/frontendengineer/js-coding-question-11-are-two-object-equal-3-solutions-56g4</guid>
      <description>&lt;p&gt;...And the series continues after couple of React Interview Questions and Coding articles. 👍 &lt;/p&gt;

&lt;p&gt;Now, this interview question can be tricky as you would need to know how to recurse in order to solve this problem/challenge. Even seasoned engineers often stumble to answer this question so better not to underestimate this problem but be ready. Video format is available below if you don't feel like reading. Here is a &lt;a href="https://codepen.io/angelo_jin/pen/abLKKaX"&gt;Codepen&lt;/a&gt; if you want to edit/play around the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interview Question #11:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Write a function or program that checks if two objects are equal.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There can be many solutions to problems/challenges that are efficient and less efficient, elegant and less elegant. If you have any other than the 3 solutions I have, please share so others may benefit. Below is my 3 solutions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution #1:
&lt;/h3&gt;

&lt;p&gt;JSON.stringify&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sortString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&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;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;isEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;obj2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj1&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;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// sort so it will handle object properties that are not in order&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;sortString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;sortString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&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;blockquote&gt;
&lt;p&gt;This is an approach that looks very dirty/hacky but may still be useful if one is comparing smaller objects. It is easy and fast to write and do not need any libraries which adds overhead to the final js bundle. Since this is fast to write, it may also be useful for quick sanity check or verifying if two objects are equal.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Solution #2:
&lt;/h3&gt;

&lt;p&gt;Using a lib&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;lodashEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;obj2&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="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;obj2&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;blockquote&gt;
&lt;p&gt;Most codebases have js utility already. What I like about libraries are that they solve common problems effectively and are well-tested to cover edge cases. I love open source libs and I am firm believer not to reinvent the wheel for problems that are already been solved.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Solution #3:
&lt;/h3&gt;

&lt;p&gt;Custom Approach&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;deepEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;obj2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ensure that arguments are objects&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;obj1&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;obj2&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;obj1&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;obj2&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="c1"&gt;// return false right away if objects properties length are not equal&lt;/span&gt;
      &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj2&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        &lt;span class="c1"&gt;// use reduce setting the initial value to equal which is true&lt;/span&gt;
        &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;curr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="c1"&gt;// then recurse as deep as possible and keep recursing if values are objects&lt;/span&gt;
          &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;deepEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;curr&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;obj2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;curr&lt;/span&gt;&lt;span class="p"&gt;]);&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="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;// just do normal compare if not an object&lt;/span&gt;
      &lt;span class="nx"&gt;obj1&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;obj2&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;blockquote&gt;
&lt;p&gt;This custom approach requires recursion to be able to compare nested, deep objects. Many interviewers would want to see interviewees show/draft their own solution as they want to see how they communicate, think and code at the same time. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Final Thoughts:
&lt;/h2&gt;

&lt;p&gt;If I am interviewing someone and they can tell me that solution maybe using a libraries AND sudo code a custom solution trying to recurse through it, I would be satisfied with those answer. How about you? What are your thoughts?&lt;/p&gt;

&lt;p&gt;Feel free to bookmark 🔖 even if you don't need this for now. You may need to refresh/review down the road when it is time for you to look for a new role. &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/2j8L8RsHQpM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>challenge</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>career</category>
    </item>
    <item>
      <title>10 ReactJS Coding Challenge (💥Coding Interview Prep💥)</title>
      <dc:creator>Let's Code</dc:creator>
      <pubDate>Wed, 05 Jan 2022 00:20:37 +0000</pubDate>
      <link>https://dev.to/frontendengineer/10-reactjs-coding-exercises-with-codepen-exercise-and-solution--22k7</link>
      <guid>https://dev.to/frontendengineer/10-reactjs-coding-exercises-with-codepen-exercise-and-solution--22k7</guid>
      <description>&lt;p&gt;Last month, I posted 2 ReactJS interview questions 🎤 - &lt;a href="https://dev.to/frontendengineer/react-interview-questions-part-2-mid-senior-level-cal"&gt;Advance Questions&lt;/a&gt; and &lt;a href="https://dev.to/frontendengineer/common-react-interview-questions-50gm"&gt;Commonly Asked Question&lt;/a&gt; and got a significant welcome by dev.to community. 🤗 🥰 Many thanks to all of you!&lt;/p&gt;

&lt;p&gt;I decided to complete the package by creating codepen exercises 📝 and a video 📺 to follow up on that effort as one will need to code following the technical interview questions. Also, I added potential solutions for the exercises which is listed below. &lt;/p&gt;

&lt;p&gt;If you need to brush up 🆙 your ninja ReactJS skills, you can try to answer the exercises below OR click the video below to guide you step-by-step interactively. (No filler, fast, straight to the point as I highly respect/value your time)&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/VzNNjNmbXpY"&gt;
&lt;/iframe&gt;
 &lt;/p&gt;

&lt;p&gt;These exercises and solutions will also be available on the video as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exercises: 🏋️
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Display simple JSX
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/wvrygZa"&gt;https://codepen.io/angelo_jin/pen/wvrygZa&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Display array of users to browser
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/QWqQdXE"&gt;https://codepen.io/angelo_jin/pen/QWqQdXE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Show/Hide Element on Screen
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/zYERZZL"&gt;https://codepen.io/angelo_jin/pen/zYERZZL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2 way data binding in ReactJS
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/MWEQmqN"&gt;https://codepen.io/angelo_jin/pen/MWEQmqN&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Disable a button
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/YzrazGY"&gt;https://codepen.io/angelo_jin/pen/YzrazGY&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Update the parent state
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/JjrLjOy"&gt;https://codepen.io/angelo_jin/pen/JjrLjOy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Dynamically add child components (React Children)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/BawrpeX"&gt;https://codepen.io/angelo_jin/pen/BawrpeX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Sum of Two Numbers
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/zYEWZNR"&gt;https://codepen.io/angelo_jin/pen/zYEWZNR&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Create Counter App
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/mdBxWwN"&gt;https://codepen.io/angelo_jin/pen/mdBxWwN&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Fetch data from an API
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/oNGqZpm"&gt;https://codepen.io/angelo_jin/pen/oNGqZpm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Solutions: 🙋
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Display simple JSX
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/xxXrZLd"&gt;https://codepen.io/angelo_jin/pen/xxXrZLd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Display array of users to browser
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/wvreMpZ"&gt;https://codepen.io/angelo_jin/pen/wvreMpZ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Show/Hide Element on Screen
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/abLwyrL"&gt;https://codepen.io/angelo_jin/pen/abLwyrL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2 way data binding in ReactJS
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/yLzvMop"&gt;https://codepen.io/angelo_jin/pen/yLzvMop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Disable a button
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/dyVmyYz"&gt;https://codepen.io/angelo_jin/pen/dyVmyYz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Update the parent state
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/KKXoKgO"&gt;https://codepen.io/angelo_jin/pen/KKXoKgO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Dynamically add child components (React Children)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/MWEVJNb"&gt;https://codepen.io/angelo_jin/pen/MWEVJNb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Sum of Two Numbers
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/BawrWzy"&gt;https://codepen.io/angelo_jin/pen/BawrWzy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Create Counter App 🕒
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/yLzKMXX"&gt;https://codepen.io/angelo_jin/pen/yLzKMXX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Fetch data from an API
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://codepen.io/angelo_jin/pen/zYEWZdW"&gt;https://codepen.io/angelo_jin/pen/zYEWZdW&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy coding and good luck on your next interview! I hope this material will help you land your next dream job. 💰 🚗 📈&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>webdev</category>
      <category>challenge</category>
    </item>
    <item>
      <title>Time for a job change? 🤔</title>
      <dc:creator>Let's Code</dc:creator>
      <pubDate>Thu, 30 Dec 2021 00:46:12 +0000</pubDate>
      <link>https://dev.to/frontendengineer/time-for-change-469l</link>
      <guid>https://dev.to/frontendengineer/time-for-change-469l</guid>
      <description>&lt;p&gt;Prices 💲 and services everywhere are continuing to soar 📈 at record levels AND the worth of money on our savings account is losing value over time. Although the yearly salary 💶 increase helps, it seems to be not enough.&lt;/p&gt;

&lt;p&gt;The thought of a career 💼 switch definitely came to mind as it may bring at least extra 20% more compensation. It is understandable if this option doesn't apply to many as everybody's situation are different - one is happy and job hopping is a bit risky. &lt;/p&gt;

&lt;p&gt;I am leaning on looking to better provide for my family. As a matter of fact I have couple of interviews lined up next week. What is your situation and are you considering it?&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://dev.to/frontendengineer/series/14457"&gt;resource&lt;/a&gt; might help you in case you need a refresher on interview.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Holidays are almost over 😭 Back to Reality 😱</title>
      <dc:creator>Let's Code</dc:creator>
      <pubDate>Thu, 30 Dec 2021 00:25:08 +0000</pubDate>
      <link>https://dev.to/frontendengineer/holiday-is-over-back-to-reality-4op</link>
      <guid>https://dev.to/frontendengineer/holiday-is-over-back-to-reality-4op</guid>
      <description>&lt;p&gt;While some of us might be back to work already after a glorious holiday, some of us will be back after the New Year's holiday and will face the inevitable. I am one of the latter and is definitely not quite ready yet.&lt;/p&gt;

&lt;p&gt;I am curious on what did you do during the long holiday - either personal and professional wise. Below is my story. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Spent my leave on staycation. I hang out with the family and in-laws. Lots of shopping and ice skating.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ate a bunch of unhealthy food I shouldn't be eating - more than what I imagined. Major diet after New Year to follow. 😊&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally, wrote couple of ReactJS articles here at dev.to and created a video version that I am very proud of (still honing my video recording skills). Below are the links if you want to check it out. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thanks for the dev.to community for a great, warm support of the articles.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/frontendengineer/react-interview-questions-part-2-mid-senior-level-cal"&gt;Advance React Interview Questions&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/frontendengineer/common-react-interview-questions-50gm"&gt;Basic React Interview Questions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, that is my story. What is yours - No right/wrong answers.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>React Interview Questions (Mid - Senior Level)</title>
      <dc:creator>Let's Code</dc:creator>
      <pubDate>Sun, 26 Dec 2021 07:36:44 +0000</pubDate>
      <link>https://dev.to/frontendengineer/react-interview-questions-part-2-mid-senior-level-cal</link>
      <guid>https://dev.to/frontendengineer/react-interview-questions-part-2-mid-senior-level-cal</guid>
      <description>&lt;p&gt;Here are some advance common React interview questions that may be asked on your next interview. Good luck if you are about to interview and I hope this material will help you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are React Hooks?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;React Hooks&lt;/strong&gt; are a new addition in React version 16.8. They let you use state and other React features without converting functional components to a class. &lt;/p&gt;

&lt;p&gt;Hooks does the same job with less code and with less code means less chances of producing bugs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic Hooks
&lt;/h3&gt;

&lt;h4&gt;
  
  
  useState
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;returns a stateful value, and a function to update it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  useEffect
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;lets us perform side effects in function components&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  useContext
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;gives a simple function to access the data via value prop of the Context Provider in any child component&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Additional Hooks
&lt;/h3&gt;

&lt;h4&gt;
  
  
  useReducer
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;state management like redux for managing state in smaller applications rather than having to reach for a third-party state management library&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  useCallback
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;memoizes callback functions, so they not recreated on every re-render.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  useMemo
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;stores the results of expensive operations&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  useRef
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;lets us perform side effects in function components&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  useImperativeHandle
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Used together with forwardRef which allows you to modify the ref instance that is exposed from parent components&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  useLayoutEffect
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;this runs synchronously immediately after React has performed all DOM mutations&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  useDebugValue
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;allows you to display additional, helpful information next to your custom Hooks, with optional formatting.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is context?
&lt;/h2&gt;

&lt;p&gt;Context provides a way to pass data through component tree without having to pass props down manually at every level. &lt;/p&gt;

&lt;p&gt;It is designed to share data that can be considered global for a tree of React components.￼&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Apply it sparingly because it makes component reuse more difficult. Consider component composition as it is often a simpler solution than context.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How to pass data between components?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;To pass data from parent to child, use props&lt;/li&gt;
&lt;li&gt;To pass data from child to parent, use callbacks&lt;/li&gt;
&lt;li&gt;To pass data among siblings AND anywhere else

&lt;ol&gt;
&lt;li&gt;use React’s Context API also&lt;/li&gt;
&lt;li&gt;use state management libraries for mid - big sized applications that are stateful. &lt;strong&gt;Example:&lt;/strong&gt; Redux, MobX, and Recoil &lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What are some limitations of React.
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;First&lt;/em&gt;, JSX can make the coding complex. It will have a steep learning curve for the beginners&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Second&lt;/em&gt;, React documentation is not user friendly and thorough as it should be.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Third&lt;/em&gt;, every React project are unique to engineers as they will rely on numerous technologies to incorporate in their projects. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is prop drilling and how can you avoid it?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Prop Drilling&lt;/strong&gt; is the process by which data is passed from one component to deeply nested components. This becomes a problem as other components will contain data that they don’t need. &lt;/p&gt;

&lt;p&gt;Also, It will make the components hard to maintain.&lt;/p&gt;

&lt;p&gt;A common approach to avoid prop drilling is to use React context and state management libraries. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Few disadvantage of prop drilling&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Components that should not otherwise be aware of the data become unnecessarily complicated &lt;/li&gt;
&lt;li&gt;Harder to maintain.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What is the use of dangerouslySetInnerHTML?
&lt;/h2&gt;

&lt;p&gt;This property is React’s replacement for using innerHTML in the browser. It will render raw HTML in a component. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One should limit its use because it can expose users to potential cross-site scripting attacks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Name a few techniques to optimize React app performance.
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;First&lt;/em&gt;, Use React.Suspense and React.Lazy for Lazy Loading Components. This will only load component when it is needed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;LazyComponent&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./LazyComponent&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;LazyComponent&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="nx"&gt;lazy&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./LazyComponent&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;p&gt;&lt;em&gt;Second&lt;/em&gt;, Use React.memo for Component Memoization&lt;br&gt;
&lt;strong&gt;React.memo&lt;/strong&gt; is a higher order component that will render the component and memoizes the result. Before the next render, if the new props are the same, React reuses the memoized result skipping the next rendering&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MyComponent&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="nx"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="cm"&gt;/* render only if the props changed */&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Note: If React.memo has a &lt;em&gt;useState&lt;/em&gt;, &lt;em&gt;useReducer&lt;/em&gt; or &lt;em&gt;useContext&lt;/em&gt; Hook in its implementation, it will still re-render when state or context change.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The more often the component renders with the same props, &lt;br&gt;
the heavier and the more computationally expensive the output is, the more chances are that component needs to be wrapped in React.memo().&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Third&lt;/em&gt;, Use &lt;strong&gt;React.Fragment&lt;/strong&gt; to Avoid Adding Extra Nodes to the DOM React Fragments do not produce any extra elements in the DOM Fragment’s child components will be rendered without any wrapping DOM node. &lt;/p&gt;

&lt;p&gt;This is a cleaner alternative rather than adding divs in the code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Fragment&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Best App&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Easy as pie!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Fragment&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also use the short syntax &amp;lt;&amp;gt;&amp;lt;/&amp;gt; for declaring a Fragment.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&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="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Best App&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Easy as pie!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&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;Fourth, Use &lt;a href="https://github.com/reduxjs/reselect"&gt;Reselect&lt;/a&gt; / &lt;a href="https://github.com/toomuchdesign/re-reselect"&gt;Re-reselect&lt;/a&gt; in Redux to Avoid Frequent Re-render.&lt;br&gt;
&lt;strong&gt;Reselect&lt;/strong&gt; is a library for building memoized selectors that is commonly used for redux.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Advantages&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selectors can compute derived data, allowing Redux to store the minimal possible state.&lt;/li&gt;
&lt;li&gt;Selectors are efficient. A selector is not recomputed unless one of its arguments changes.&lt;/li&gt;
&lt;li&gt;Selectors are composable. They can be used as input to other selectors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Re-reselect&lt;/strong&gt; is a lightweight wrapper around Reselect to enhance selectors with deeper memoization and cache management.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Useful to:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Retain selector's cache when sequentially called with one/few different arguments&lt;/li&gt;
&lt;li&gt;Join similar selectors into one&lt;/li&gt;
&lt;li&gt;Share selectors with props across multiple component instances&lt;/li&gt;
&lt;li&gt;Instantiate selectors on runtime&lt;/li&gt;
&lt;li&gt;Enhance reselect with custom caching strategies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Last, Use Production Build&lt;br&gt;
Ensure that application is bundled for production before deploying. &lt;/p&gt;
&lt;h2&gt;
  
  
  What is reconciliation?
&lt;/h2&gt;

&lt;p&gt;When a component's props or state change, React decides whether an actual DOM update is necessary by comparing the newly returned element with the previously rendered one. When they are not equal, React will update the DOM. This process is called reconciliation. &lt;/p&gt;
&lt;h2&gt;
  
  
  What are Higher-Order Components?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;higher-order component&lt;/strong&gt; (HOC) is an advanced technique in React for reusing component logic. It is a function that takes a component and returns a new component.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;EnhancedComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;higherOrderComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;WrappedComponent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;HOCs are common in third-party React libraries, such as Redux’s &lt;a href="https://github.com/reduxjs/react-redux/blob/master/docs/api/connect.md#connect"&gt;connect&lt;/a&gt; and Relay’s &lt;a href="https://relay.dev/docs/v10.1.3/fragment-container/#createfragmentcontainer"&gt;createFragmentContainer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;HOC can be used for many use cases:&lt;/em&gt; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Conditionally rendering components.&lt;/li&gt;
&lt;li&gt;Providing components with specific styles.&lt;/li&gt;
&lt;li&gt;Give other components any props. &lt;/li&gt;
&lt;li&gt;Showing a loader while a component waits for data &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What is children prop?
&lt;/h2&gt;

&lt;p&gt;It is a prop that allow us to pass components as data to other components, just like any other prop. Component tree between the component's opening tag and closing tag will be passed to that component as children prop.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MyComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;MyComponent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./MyComponent&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;App&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="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MyComponent&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="na"&gt;Simple&lt;/span&gt; &lt;span class="na"&gt;React&lt;/span&gt; &lt;span class="na"&gt;App&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Very Kewl Feature&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;MyComponent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to pass a parameter to an event handler or callback?
&lt;/h2&gt;

&lt;p&gt;You can use an arrow function to wrap around an event handler and pass parameters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleClick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also pass arguments to a function which is defined as arrow function&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleClick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`The id is &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt; 

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleClick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why do we need to pass a function to setState()?
&lt;/h2&gt;

&lt;p&gt;setState() is an asynchronous operation. React batches state changes for performance reasons. This means state may not change immediately after setState() is called. &lt;/p&gt;

&lt;p&gt;We should not rely on the current state when calling setState() since we can't be sure what that state will be.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Wrong &lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;counter&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The solution is to pass a function to setState(), with the previous state as an argument.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Correct &lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prevState&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;prevState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;counter&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;}))&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feel free to bookmark 🔖 even if you don't need this for now. You may need to refresh/review down the road when it is time for you to look for a new role.&lt;/p&gt;

&lt;p&gt;If you want to support me - &lt;a href="https://www.buymeacoffee.com/letscode77"&gt;Buy Me A Coffee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Video 🎥 Format if you don't feel like reading: &lt;iframe width="710" height="399" src="https://www.youtube.com/embed/mYnsLOAIOCc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>React Interview Questions (Entry - Junior Level)</title>
      <dc:creator>Let's Code</dc:creator>
      <pubDate>Thu, 16 Dec 2021 23:16:52 +0000</pubDate>
      <link>https://dev.to/frontendengineer/common-react-interview-questions-50gm</link>
      <guid>https://dev.to/frontendengineer/common-react-interview-questions-50gm</guid>
      <description>&lt;p&gt;Here are the most common React interview questions that will be asked on your next interview. Good luck if you are about to interview and I hope this material will help you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is React?
&lt;/h2&gt;

&lt;p&gt;React is an open-source JavaScript frontend library for creating user interfaces. It uses component based approach to create complicated, interactive web and mobile user interfaces.&lt;/p&gt;

&lt;p&gt;Developing single-page application with React is effortless especially using the integrated toolchain called Create React App.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the advantages of React?
&lt;/h2&gt;

&lt;p&gt;First is the increased performance with Virtual DOM. React is insanely blazing fast. &lt;/p&gt;

&lt;p&gt;Second, React uses JSX that makes code painless to read and write. &lt;/p&gt;

&lt;p&gt;Third, React works on both the client and server side. &lt;/p&gt;

&lt;p&gt;Fourth, it is simple to integrate this library with other frameworks since it is only a view library. &lt;/p&gt;

&lt;p&gt;Last, it is easy to write unit tests. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is JSX?
&lt;/h2&gt;

&lt;p&gt;JSX is a syntax extension to JavaScript that describes what the UI should look with the full power of JavaScript. JSX provides syntactic sugar for the React.createElement() function. &lt;/p&gt;

&lt;p&gt;JSX gets compiled to React.createElement() calls which return plain JavaScript objects. It gives us expressiveness of JavaScript along with HTML like template syntax. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is the difference between Element and Component?
&lt;/h2&gt;

&lt;p&gt;React elements are the building blocks of React applications.&lt;br&gt;
It describes what you want to see on the screen. React elements are immutable.&lt;/p&gt;

&lt;p&gt;React components are small, reusable pieces of code that return a React element to be rendered to the page. The simplest version of React component is a plain JavaScript function that returns a React element. Components can also be ES6 classes.&lt;/p&gt;

&lt;p&gt;You can say that a component is a factory for creating multiple elements.&lt;/p&gt;
&lt;h2&gt;
  
  
  What are react fragments?
&lt;/h2&gt;

&lt;p&gt;Fragments let you group a list of children without adding extra nodes to the DOM because fragments are not rendered to the DOM. &lt;/p&gt;

&lt;p&gt;This is also very useful for CSS Flexbox and Grid as they have special parent to child relationship as adding an extra tag in the between will break the layout. &lt;/p&gt;
&lt;h2&gt;
  
  
  What is prop in React?
&lt;/h2&gt;

&lt;p&gt;Props or properties are arguments passed into React components. It contains data coming down from a parent component to a child component. &lt;/p&gt;
&lt;h2&gt;
  
  
  What is "key" prop?
&lt;/h2&gt;

&lt;p&gt;Keys help react identify which elements were added, changed or updated, and removed. It should be given to array elements to provide a unique identity for each element.&lt;/p&gt;

&lt;p&gt;React would be able to reorder elements without needing to re-evaluate as much. &lt;/p&gt;
&lt;h2&gt;
  
  
  What is state in React?
&lt;/h2&gt;

&lt;p&gt;State holds some information that may change over the lifetime of the component. It is private and fully controlled by the component until the owner component decides to pass it. &lt;/p&gt;
&lt;h2&gt;
  
  
  Why should we not update the state directly?
&lt;/h2&gt;

&lt;p&gt;Updating the state directly, like below will not cause the component to re-render.&lt;/p&gt;

&lt;p&gt;Instead, use setState() method. This method will schedule an update to a component's state object. When state changes, the component responds by re-rendering. &lt;/p&gt;
&lt;h2&gt;
  
  
  What are lifecycle methods?
&lt;/h2&gt;

&lt;p&gt;Lifecycle methods are custom functionality that gets executed during the different phases of a component. &lt;/p&gt;

&lt;p&gt;These are methods are available when the component gets created or inserted into the DOM, when the component updates, and when the component gets unmounted or removed from the DOM.&lt;/p&gt;
&lt;h2&gt;
  
  
  What are Controlled and Uncontrolled Component.
&lt;/h2&gt;

&lt;p&gt;A Controlled Component is one that takes a value through props and notify changes through callbacks like &lt;code&gt;onChange&lt;/code&gt; or &lt;code&gt;onClick&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Form data is handled by React component.&lt;/p&gt;

&lt;p&gt;Uncontrolled Component is one that stores its own state internally, and queries the DOM using a ref or reference to find the current value when it is needed. &lt;/p&gt;

&lt;p&gt;Form data is handled by the DOM.&lt;/p&gt;

&lt;p&gt;In most cases, Controlled components are recommended to be used when implement forms.&lt;/p&gt;
&lt;h2&gt;
  
  
  What is the use of refs?
&lt;/h2&gt;

&lt;p&gt;The ref is used to return a reference to the element. They can be useful when you need direct access to the DOM element or an instance of a component. &lt;/p&gt;
&lt;h2&gt;
  
  
  Why should component names start with capital letters?
&lt;/h2&gt;

&lt;p&gt;The type of a component is determined by the way the tags are named. Both capitalized and dot notations are treated as React component while lowercase are treated as DOM elements.&lt;/p&gt;
&lt;h2&gt;
  
  
  What is Virtual DOM?
&lt;/h2&gt;

&lt;p&gt;Virtual DOM or VDOM is lightweight JavaScript representation of the DOM. The representation of User Interface is kept in memory and synced with the "real" DOM. Update on virtual DOM is cheaper and faster than updating the actual DOM.&lt;/p&gt;

&lt;p&gt;When React finds the differences between the previous virtual DOM and the current virtual DOM, it only makes the necessary changes to the actual DOM.  &lt;/p&gt;

&lt;p&gt;Feel free to bookmark 🔖 even if you don't need this for now. You may need to refresh/review down the road when it is time for you to look for a new role.&lt;/p&gt;

&lt;p&gt;If you want to support me - &lt;a href="https://www.buymeacoffee.com/letscode77"&gt;Buy Me A Coffee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Video 🎥 Format if you don't feel like reading:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/v6Myf4WoL00"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>(Compilation) 10 Common Javascript Coding Interview Questions</title>
      <dc:creator>Let's Code</dc:creator>
      <pubDate>Sat, 30 Oct 2021 17:22:11 +0000</pubDate>
      <link>https://dev.to/frontendengineer/compilation-10-common-javascript-coding-interview-55d2</link>
      <guid>https://dev.to/frontendengineer/compilation-10-common-javascript-coding-interview-55d2</guid>
      <description>&lt;p&gt;Are you ready for your next front-end role 💼 💻 or are about to start a career as a front end developer/engineer? If so, here is a video 🎥 of 10 Common Javascript Coding Interview Questions that may appear on your next or future interview.&lt;/p&gt;

&lt;p&gt;I took my previous post/video and compile it on a one video. Good luck if you are about to interview!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contents:
&lt;/h3&gt;

&lt;p&gt;0:06 - Palindrome&lt;br&gt;
1:18 - Find Min and Max&lt;br&gt;
2:59 - Balanced Parenthesis&lt;br&gt;
4:46 - Remove Duplicates In Array&lt;br&gt;
6:08 - Reverse a string&lt;br&gt;
7:27 - Count Vowels in a string&lt;br&gt;
9:31 - Capitalize All Words in Sentence&lt;br&gt;
11:25 - Commonly used character in a string&lt;br&gt;
13:49 - Fizz Buzz&lt;br&gt;
15:08 - Anagram&lt;/p&gt;
&lt;h3&gt;
  
  
  Codepen:
&lt;/h3&gt;

&lt;p&gt;(If you want to see code that was used and play around with code)&lt;br&gt;
Palindrome: &lt;a href="https://codepen.io/angelo_jin/pen/RwgPVwr"&gt;https://codepen.io/angelo_jin/pen/RwgPVwr&lt;/a&gt;&lt;br&gt;
Find Min and Max: &lt;a href="https://codepen.io/angelo_jin/pen/zYzvQdM"&gt;https://codepen.io/angelo_jin/pen/zYzvQdM&lt;/a&gt;&lt;br&gt;
Balanced Parenthesis: &lt;a href="https://codepen.io/angelo_jin/pen/OJgwaed"&gt;https://codepen.io/angelo_jin/pen/OJgwaed&lt;/a&gt;&lt;br&gt;
Remove Duplicates In Array: &lt;a href="https://codepen.io/angelo_jin/pen/PojPRzQ"&gt;https://codepen.io/angelo_jin/pen/PojPRzQ&lt;/a&gt;&lt;br&gt;
Reverse a string: &lt;a href="https://codepen.io/angelo_jin/pen/LYyvBKy"&gt;https://codepen.io/angelo_jin/pen/LYyvBKy&lt;/a&gt;&lt;br&gt;
Count vowels in a string: &lt;a href="https://codepen.io/angelo_jin/pen/zYzYdmQ"&gt;https://codepen.io/angelo_jin/pen/zYzYdmQ&lt;/a&gt;&lt;br&gt;
Capitalize All Words in Sentence: &lt;a href="https://codepen.io/angelo_jin/pen/xxrdBVE"&gt;https://codepen.io/angelo_jin/pen/xxrdBVE&lt;/a&gt;&lt;br&gt;
Commonly Used Character in a string: &lt;a href="https://codepen.io/angelo_jin/pen/abwYGPo"&gt;https://codepen.io/angelo_jin/pen/abwYGPo&lt;/a&gt;&lt;br&gt;
Fizz Buzz: &lt;a href="https://codepen.io/angelo_jin/pen/MWobgqj"&gt;https://codepen.io/angelo_jin/pen/MWobgqj&lt;/a&gt;&lt;br&gt;
Anagram: &lt;a href="https://codepen.io/angelo_jin/pen/xxrVmdg"&gt;https://codepen.io/angelo_jin/pen/xxrVmdg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to bookmark 🔖 even if you don't need this for now. You may need to refresh/review down the road when it is time for you to look for a new role.&lt;/p&gt;

&lt;p&gt;If you want to support me - &lt;a href="https://www.buymeacoffee.com/letscode77"&gt;Buy Me A Coffee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/nxzGjfet388"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>html</category>
      <category>css</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>(Compilation) Front-End Most Commonly Asked Interview Questions [HTML, CSS &amp; Javascript]</title>
      <dc:creator>Let's Code</dc:creator>
      <pubDate>Thu, 28 Oct 2021 05:09:00 +0000</pubDate>
      <link>https://dev.to/frontendengineer/front-end-most-commonly-asked-interview-questions-html-css-javascript-47op</link>
      <guid>https://dev.to/frontendengineer/front-end-most-commonly-asked-interview-questions-html-css-javascript-47op</guid>
      <description>&lt;p&gt;Are you ready for your next front-end role 💼 💻 or are about to start a career as a front end developer/engineer? If so, here is a video 🎥 of most commonly asked HTML, CSS and JS questions in one video that will definitely help you out. &lt;/p&gt;

&lt;p&gt;I took my previous post/video and remastered it spending over 100+ hours 🕒 to make the video more appealing, interesting, and fun so it can be used repeatedly hopefully for many generations to come. Hope you enjoy!&lt;/p&gt;

&lt;p&gt;Feel free to bookmark 🔖 even if you don't need this for now. You may need to refresh/review down the road when it is time for you to look for a new role.&lt;/p&gt;

&lt;p&gt;If you want to support me - &lt;a href="https://www.buymeacoffee.com/letscode77"&gt;Buy Me A Coffee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/npcNFM9SQTg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>html</category>
      <category>css</category>
      <category>javascript</category>
      <category>career</category>
    </item>
  </channel>
</rss>
