<?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: ReactChallenges</title>
    <description>The latest articles on DEV Community by ReactChallenges (@reactchallenges).</description>
    <link>https://dev.to/reactchallenges</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%2F854942%2Fe450946a-3098-4715-8d06-0892ab9ac221.png</url>
      <title>DEV Community: ReactChallenges</title>
      <link>https://dev.to/reactchallenges</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/reactchallenges"/>
    <language>en</language>
    <item>
      <title>🚀 New Free React Challenge: New Way of Passing Ref</title>
      <dc:creator>ReactChallenges</dc:creator>
      <pubDate>Mon, 27 Apr 2026 20:54:44 +0000</pubDate>
      <link>https://dev.to/reactchallenges/new-free-react-challenge-new-way-of-passing-ref-29h5</link>
      <guid>https://dev.to/reactchallenges/new-free-react-challenge-new-way-of-passing-ref-29h5</guid>
      <description>&lt;p&gt;A new free challenge is now available on &lt;strong&gt;&lt;a href="https://www.reactchallenges.com/" rel="noopener noreferrer"&gt;ReactChallenges.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;React 19&lt;/strong&gt; introduced a cleaner way to work with refs across components, reducing the need for &lt;code&gt;forwardRef&lt;/code&gt; in many common scenarios.&lt;/p&gt;

&lt;p&gt;This new exercise helps you practice that pattern with a real UI example.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you'll build
&lt;/h2&gt;

&lt;p&gt;A simple issue modal where users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the modal&lt;/li&gt;
&lt;li&gt;Automatically focus the textarea when it appears&lt;/li&gt;
&lt;li&gt;Close it with &lt;strong&gt;Cancel&lt;/strong&gt; or &lt;strong&gt;Create&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What you'll learn
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How to create a ref in the parent component&lt;/li&gt;
&lt;li&gt;How to pass a ref directly to a child component in React 19&lt;/li&gt;
&lt;li&gt;How to control focus from outside the child component&lt;/li&gt;
&lt;li&gt;How this compares to the previous &lt;code&gt;forwardRef&lt;/code&gt; pattern&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;Refs are often needed for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modals&lt;/li&gt;
&lt;li&gt;Search inputs&lt;/li&gt;
&lt;li&gt;Forms&lt;/li&gt;
&lt;li&gt;Custom UI primitives&lt;/li&gt;
&lt;li&gt;Accessibility improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React 19 makes these interactions cleaner and easier to implement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the challenge
&lt;/h2&gt;

&lt;p&gt;👉 &lt;a href="https://www.reactchallenges.com" rel="noopener noreferrer"&gt;https://www.reactchallenges.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>frontendchallenge</category>
    </item>
    <item>
      <title>Composition vs Compound Components in React</title>
      <dc:creator>ReactChallenges</dc:creator>
      <pubDate>Tue, 14 Apr 2026 08:58:38 +0000</pubDate>
      <link>https://dev.to/reactchallenges/composition-vs-compound-components-in-react-2ffp</link>
      <guid>https://dev.to/reactchallenges/composition-vs-compound-components-in-react-2ffp</guid>
      <description>&lt;p&gt;In React, reusable UI usually follows two patterns: &lt;strong&gt;composition components&lt;/strong&gt; and &lt;strong&gt;compound components&lt;/strong&gt;. They are closely related, but they differ mainly in how state is handled and how the API is exposed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Composition Components (no Context)
&lt;/h2&gt;

&lt;p&gt;This is the most straightforward approach. You build UI by combining components and passing data through props.&lt;/p&gt;

&lt;p&gt;Everything is explicit: each component receives what it needs directly from its parent.&lt;/p&gt;

&lt;p&gt;This makes the system very flexible and easy to reuse, since every part is independent. You can take a subcomponent and use it anywhere without constraints.&lt;/p&gt;

&lt;p&gt;The downside is that as the UI grows, you often end up with prop drilling and a lot of wiring code. Sharing behavior between related parts also becomes harder because there is no shared state mechanism.&lt;/p&gt;

&lt;p&gt;In short: simple, explicit, and flexible, but can become verbose in complex UIs.&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;Airbnb&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Airbnb&lt;/span&gt;&lt;span class="dl"&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="nc"&gt;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Card&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ImageWrapper&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&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;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Heart&lt;/span&gt; &lt;span class="na"&gt;like&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isFavorite&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="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;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Recomendation&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ImageWrapper&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Content&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Title&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&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;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Valoration&lt;/span&gt; &lt;span class="na"&gt;average&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;average&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;reviews&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reviews&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;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Title&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Description&lt;/span&gt; &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;description&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;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Price&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;nights&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nights&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;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Cancelation&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Content&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Card&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;👉 Try it in practice: &lt;a href="https://www.reactchallenges.com/challenges/airbnb-card-composition-component" rel="noopener noreferrer"&gt;Composition Components Challenge&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Compound Components (with Context)
&lt;/h2&gt;

&lt;p&gt;This pattern introduces shared state using React Context. Instead of passing props through every level, a parent component provides state and child components consume it directly.&lt;/p&gt;

&lt;p&gt;This creates a tighter relationship between components. From the outside, the API becomes very clean because users don’t need to manage all the props manually.&lt;/p&gt;

&lt;p&gt;It works especially well for structured UI systems where components are meant to work together (like cards, modals, tabs, etc.).&lt;/p&gt;

&lt;p&gt;The trade-off is that the relationship becomes implicit. Subcomponents depend on a parent provider and are not really meant to be used in isolation. Debugging can also be slightly less obvious because the data flow is hidden inside Context.&lt;/p&gt;

&lt;p&gt;In short: more structured, cleaner API, but less flexible and more coupled.&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;Airbnb&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Airbnb&lt;/span&gt;&lt;span class="dl"&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="nc"&gt;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Card&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;el&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;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ImageWrapper&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Image&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Heart&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Recomendation&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ImageWrapper&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Content&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Title&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Valoration&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Title&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Description&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Price&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Cancelation&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Content&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Card&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;👉 Try it in practice: &lt;a href="https://www.reactchallenges.com/challenges/airbnb-card-compound-component-context" rel="noopener noreferrer"&gt;Compound Components Challenge&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Export styles
&lt;/h2&gt;

&lt;p&gt;There are two common ways to expose these components.&lt;/p&gt;

&lt;p&gt;Named exports give maximum flexibility and are easy to tree-shake, but they don’t communicate relationships between components very well.&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ImageWrapper&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Image&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Airbnb&lt;/span&gt;&lt;span class="dl"&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="nc"&gt;Card&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;el&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;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ImageWrapper&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;Image&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;ImageWrapper&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;Card&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;Namespaced exports group everything under a single object, which makes the structure much clearer and is often preferred for compound components or design systems. The trade-off is slightly more verbosity and sometimes less optimal tree-shaking.&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;Airbnb&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Airbnb&lt;/span&gt;&lt;span class="dl"&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="nc"&gt;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Card&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;el&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;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ImageWrapper&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Image&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ImageWrapper&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;Airbnb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Card&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;
  
  
  When to use each
&lt;/h2&gt;

&lt;p&gt;Use composition when components are independent and you want full flexibility with explicit data flow.&lt;/p&gt;

&lt;p&gt;Use compound components when the UI pieces are strongly related, share state, and benefit from a controlled and clean API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Composition is about &lt;strong&gt;flexibility and explicitness&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Compound components are about &lt;strong&gt;structure and shared state&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Both are just different ways of organizing the same idea: composition in React.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>frontend</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>🚀 𝗡𝗲𝘄 𝗖𝗵𝗮𝗹𝗹𝗲𝗻𝗴𝗲 𝗼𝗻 𝗥𝗲𝗮𝗰𝘁 𝗖𝗵𝗮𝗹𝗹𝗲𝗻𝗴𝗲𝘀: 𝗔𝗶𝗿𝗯𝗻𝗯 𝗖𝗮𝗿𝗱 𝘄𝗶𝘁𝗵 𝗖𝗼𝗺𝗽𝗼𝘂𝗻𝗱 𝗖𝗼𝗺𝗽𝗼𝗻𝗲𝗻𝘁𝘀 + 𝗖𝗼𝗻𝘁𝗲𝘅𝘁</title>
      <dc:creator>ReactChallenges</dc:creator>
      <pubDate>Mon, 13 Apr 2026 08:44:26 +0000</pubDate>
      <link>https://dev.to/reactchallenges/--5bdk</link>
      <guid>https://dev.to/reactchallenges/--5bdk</guid>
      <description>&lt;p&gt;A new intermediate challenge is now live focused on one of the most powerful &lt;strong&gt;React patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;🧩 𝗖𝗼𝗺𝗽𝗼𝘂𝗻𝗱 𝗖𝗼𝗺𝗽𝗼𝗻𝗲𝗻𝘁𝘀&lt;br&gt;
🌐 𝗥𝗲𝗮𝗰𝘁 𝗖𝗼𝗻𝘁𝗲𝘅𝘁&lt;br&gt;
♻️ 𝗥𝗲𝘂𝘀𝗮𝗯𝗹𝗲 𝗖𝗼𝗺𝗽𝗼𝗻𝗲𝗻𝘁 𝗔𝗿𝗰𝗵𝗶𝘁𝗲𝗰𝘁𝘂𝗿𝗲&lt;/p&gt;

&lt;p&gt;In this challenge, you'll build a fully functional Airbnb-style card component using the Compound Components pattern powered by &lt;strong&gt;Context&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal is to create a flexible API where subcomponents share state implicitly through a provider — just like production-grade UI libraries.&lt;/p&gt;

&lt;p&gt;This challenge will help you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand how compound components scale&lt;/li&gt;
&lt;li&gt;Use Context to avoid prop drilling&lt;/li&gt;
&lt;li&gt;Design clean and extensible component APIs&lt;/li&gt;
&lt;li&gt;Think in terms of composition over configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perfect if you're moving beyond basic components and want to write more maintainable, real-world React code.&lt;/p&gt;

&lt;p&gt;Try it here 👇&lt;br&gt;
&lt;a href="https://www.reactchallenges.com/challenges/airbnb-card-compound-component-context" rel="noopener noreferrer"&gt;https://www.reactchallenges.com/challenges/airbnb-card-compound-component-context&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;𝗙𝗲𝗲𝗱𝗯𝗮𝗰𝗸 𝗶𝘀 𝗮𝗹𝘄𝗮𝘆𝘀 𝘄𝗲𝗹𝗰𝗼𝗺𝗲.&lt;/p&gt;

&lt;p&gt;💬 What advanced React patterns would you like to practice next?&lt;/p&gt;

&lt;p&gt;💾 Save this for your React learning path&lt;br&gt;
♻ Repost to help other developers&lt;br&gt;
👥 Share with your frontend team&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>frontendchallenge</category>
    </item>
    <item>
      <title>🚀 New React Challenge: Play Soroban</title>
      <dc:creator>ReactChallenges</dc:creator>
      <pubDate>Fri, 20 Mar 2026 11:21:02 +0000</pubDate>
      <link>https://dev.to/reactchallenges/new-react-challenge-play-soroban-3bk9</link>
      <guid>https://dev.to/reactchallenges/new-react-challenge-play-soroban-3bk9</guid>
      <description>&lt;p&gt;Test your React skills with this &lt;strong&gt;interactive Soroban-style game&lt;/strong&gt;!&lt;br&gt;&lt;br&gt;
A sequence of numbers appears on the screen, and after it ends, you need to verify the calculated sum.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Try This Challenge?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🧠 Practice &lt;strong&gt;state management&lt;/strong&gt; and &lt;strong&gt;React hooks&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;⏱️ Handle &lt;strong&gt;timed interactions&lt;/strong&gt; and &lt;strong&gt;dynamic rendering&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;🎯 Improve problem-solving in &lt;strong&gt;fun, bite-sized challenges&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Here
&lt;/h2&gt;

&lt;p&gt;👉 &lt;a href="https://www.reactchallenges.com/challenges/play-soroban" rel="noopener noreferrer"&gt;Play Soroban Challenge&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Your feedback is always welcome!&lt;br&gt;&lt;br&gt;
💬 Comment which &lt;strong&gt;React challenge&lt;/strong&gt; you’d like to see next.&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>frontendchallenge</category>
    </item>
    <item>
      <title>Level Up Your React Knowledge with Quizzes 🧩</title>
      <dc:creator>ReactChallenges</dc:creator>
      <pubDate>Mon, 09 Mar 2026 15:37:03 +0000</pubDate>
      <link>https://dev.to/reactchallenges/level-up-your-react-knowledge-with-quizzes-258</link>
      <guid>https://dev.to/reactchallenges/level-up-your-react-knowledge-with-quizzes-258</guid>
      <description>&lt;p&gt;A new feature has been added to &lt;strong&gt;&lt;a href="https://www.reactchallenges.com" rel="noopener noreferrer"&gt;ReactChallenges.com&lt;/a&gt;&lt;/strong&gt;: interactive quizzes designed to help developers test and reinforce their React knowledge.&lt;/p&gt;

&lt;p&gt;They are especially useful for developers preparing for &lt;strong&gt;React interviews&lt;/strong&gt; or anyone who wants to quickly validate their understanding of key concepts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quiz Topics
&lt;/h2&gt;

&lt;p&gt;The quizzes are currently organized into three main sections:&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 Core Concepts
&lt;/h3&gt;

&lt;p&gt;Fundamental React topics such as component structure, JSX, state and props, event handling, forms, lists, and common design patterns used to structure React applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  🪝 Hooks &amp;amp; Side Effects
&lt;/h3&gt;

&lt;p&gt;Concepts related to React hooks and managing side effects, including state management with hooks, refs, context, reducers, and best practices for writing reusable custom hooks.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ Rendering &amp;amp; Performance
&lt;/h3&gt;

&lt;p&gt;Advanced topics focused on how React renders and updates the UI, including rendering behavior, reconciliation, hydration, concurrency features, Suspense, and performance optimization techniques.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why quizzes?
&lt;/h2&gt;

&lt;p&gt;Reading documentation is useful, but &lt;strong&gt;actively testing knowledge&lt;/strong&gt; helps reinforce concepts much faster.&lt;/p&gt;

&lt;p&gt;These quizzes aim to simulate the types of questions commonly encountered in &lt;strong&gt;technical interviews and real-world scenarios&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try them here
&lt;/h2&gt;

&lt;p&gt;👉 &lt;a href="https://www.reactchallenges.com/quizzes" rel="noopener noreferrer"&gt;https://www.reactchallenges.com/quizzes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🚀 New FREE React Challenge: New way of data fetching</title>
      <dc:creator>ReactChallenges</dc:creator>
      <pubDate>Mon, 09 Feb 2026 12:14:14 +0000</pubDate>
      <link>https://dev.to/reactchallenges/new-free-react-challenge-new-way-of-data-fetching-4g55</link>
      <guid>https://dev.to/reactchallenges/new-free-react-challenge-new-way-of-data-fetching-4g55</guid>
      <description>&lt;p&gt;Our latest &lt;strong&gt;React Challenge&lt;/strong&gt; is live, and it’s all about taking your data fetching skills to the next level!  &lt;/p&gt;

&lt;p&gt;In this challenge, you'll &lt;strong&gt;replace the traditional &lt;code&gt;useState&lt;/code&gt;/&lt;code&gt;useEffect&lt;/code&gt; flow&lt;/strong&gt; with the &lt;strong&gt;new Suspense-driven &lt;code&gt;use()&lt;/code&gt; approach&lt;/strong&gt;—all while keeping the same UI behavior.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Overview
&lt;/h2&gt;

&lt;p&gt;Build a simple React page that fetches &lt;strong&gt;Rick and Morty characters&lt;/strong&gt; using &lt;code&gt;use()&lt;/code&gt;. The goal is to make your data flow more &lt;strong&gt;declarative&lt;/strong&gt;, cleaner, and easier to maintain.  &lt;/p&gt;

&lt;p&gt;You’ll keep the &lt;strong&gt;same skeleton loading UI&lt;/strong&gt; and character cards, but under the hood, your components will &lt;strong&gt;suspend until the data is ready&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fetch the character list from &lt;code&gt;https://rickandmortyapi.com/api/character/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;React Suspense&lt;/strong&gt; with &lt;code&gt;use()&lt;/code&gt; to read a &lt;strong&gt;stable promise&lt;/strong&gt; (no &lt;code&gt;useEffect&lt;/code&gt; + &lt;code&gt;useState&lt;/code&gt; fetching).&lt;/li&gt;
&lt;li&gt;Display the provided &lt;strong&gt;skeleton UI&lt;/strong&gt; while data is pending.&lt;/li&gt;
&lt;li&gt;Render &lt;strong&gt;character cards&lt;/strong&gt; after the data resolves.&lt;/li&gt;
&lt;li&gt;Maintain the &lt;strong&gt;existing layout and styling&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create the fetch promise &lt;strong&gt;outside the component&lt;/strong&gt; so it remains stable across renders.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;CharactersSkeleton&lt;/code&gt; as the &lt;strong&gt;Suspense fallback&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Simulated latency is optional—you can remove it or adjust its duration without affecting the tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Important:&lt;/strong&gt; Tests will fail if you use &lt;code&gt;useEffect&lt;/code&gt;; the focus is on &lt;code&gt;use()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧪 Tests
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Renders the app title
&lt;/li&gt;
&lt;li&gt;Shows skeleton while loading
&lt;/li&gt;
&lt;li&gt;Renders characters after loading
&lt;/li&gt;
&lt;li&gt;Uses React &lt;code&gt;use()&lt;/code&gt; instead of &lt;code&gt;useEffect&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;This challenge is perfect for developers who want to &lt;strong&gt;modernize their React data fetching&lt;/strong&gt; and get hands-on experience with &lt;strong&gt;suspense-first rendering&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reactchallenges.com/challenges/new-way-data-fetching" rel="noopener noreferrer"&gt;🔥 Start the Challenge Now&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>frontendchallenge</category>
    </item>
    <item>
      <title>🚀 Reflex Click Game: a tiny React challenge to practice timers and state</title>
      <dc:creator>ReactChallenges</dc:creator>
      <pubDate>Mon, 02 Feb 2026 16:27:10 +0000</pubDate>
      <link>https://dev.to/reactchallenges/reflex-click-game-a-tiny-react-challenge-to-practice-timers-and-state-1lcg</link>
      <guid>https://dev.to/reactchallenges/reflex-click-game-a-tiny-react-challenge-to-practice-timers-and-state-1lcg</guid>
      <description>&lt;p&gt;If you want a quick React challenge that hits the essentials—state, effects, timers, and UI feedback—this one is for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build a reflex click game where:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A circle switches between red and green at random intervals&lt;/li&gt;
&lt;li&gt;Clicking green increases the score&lt;/li&gt;
&lt;li&gt;Clicking red ends the game&lt;/li&gt;
&lt;li&gt;A timer counts down to 0&lt;/li&gt;
&lt;li&gt;You win by reaching the target score before time runs out&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why this is a great mini‑project&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real practice with useEffect and cleanup&lt;/li&gt;
&lt;li&gt;Timer logic + random intervals&lt;/li&gt;
&lt;li&gt;Conditional rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key skills you’ll use&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React state management&lt;/li&gt;
&lt;li&gt;Effect cleanup and timing&lt;/li&gt;
&lt;li&gt;Controlled UI updates&lt;/li&gt;
&lt;li&gt;Basic game logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Ready to play (and build)?&lt;br&gt;
&lt;a href="https://www.reactchallenges.com/challenges/reflex-click-game" rel="noopener noreferrer"&gt;https://www.reactchallenges.com/challenges/reflex-click-game&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>frontendchallenge</category>
    </item>
    <item>
      <title>🚀 New React Challenge: Tetris II</title>
      <dc:creator>ReactChallenges</dc:creator>
      <pubDate>Mon, 19 Jan 2026 12:10:28 +0000</pubDate>
      <link>https://dev.to/reactchallenges/new-react-challenge-tetris-ii-1aab</link>
      <guid>https://dev.to/reactchallenges/new-react-challenge-tetris-ii-1aab</guid>
      <description>&lt;p&gt;This is the second part of the Tetris challenge series. In this version, the user interface, game loop, and React components are already implemented for you. &lt;/p&gt;

&lt;p&gt;Your goal is to focus purely on the game logic by completing the utility functions in &lt;code&gt;utils.ts&lt;/code&gt;. You will implement piece generation, movement, collision detection, and row clearing to make the game functional.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.reactchallenges.com/challenges/tetris-ii" rel="noopener noreferrer"&gt;https://www.reactchallenges.com/challenges/tetris-ii&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>frontendchallenge</category>
    </item>
    <item>
      <title>🚀 New React Challenge: Tetris</title>
      <dc:creator>ReactChallenges</dc:creator>
      <pubDate>Thu, 08 Jan 2026 22:37:29 +0000</pubDate>
      <link>https://dev.to/reactchallenges/new-react-challenge-tetris-25ee</link>
      <guid>https://dev.to/reactchallenges/new-react-challenge-tetris-25ee</guid>
      <description>&lt;p&gt;I’ve just published a new challenge on reactchallenges.com, and this time it’s a classic: &lt;strong&gt;Tetris&lt;/strong&gt; 🧩&lt;/p&gt;

&lt;p&gt;This challenge focuses on real-world React problems like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Game loops and timing&lt;/li&gt;
&lt;li&gt;State management&lt;/li&gt;
&lt;li&gt;Collision detection&lt;/li&gt;
&lt;li&gt;Performance considerations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s also worth mentioning that this is the kind of challenge that has appeared in technical interviews at well-known companies, and it’s generally considered a difficult one — not because of obscure tricks, but because it requires solid fundamentals, clean architecture, and careful thinking.&lt;/p&gt;

&lt;p&gt;Perfect if you want to test yourself against a truly non-trivial React problem.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.reactchallenges.com/challenges/tetris" rel="noopener noreferrer"&gt;https://www.reactchallenges.com/challenges/tetris&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>frontendchallenge</category>
    </item>
    <item>
      <title>New Free React Challenge: Countdown ⏱️</title>
      <dc:creator>ReactChallenges</dc:creator>
      <pubDate>Mon, 22 Dec 2025 17:59:09 +0000</pubDate>
      <link>https://dev.to/reactchallenges/new-free-react-challenge-countdown-1b67</link>
      <guid>https://dev.to/reactchallenges/new-free-react-challenge-countdown-1b67</guid>
      <description>&lt;p&gt;Build a real countdown timer using useState and useEffect, and deal with state, side effects, and precise time updates.&lt;/p&gt;

&lt;p&gt;Designed for beginners, but with the kind of edge cases you actually find in production.&lt;/p&gt;

&lt;p&gt;30 minutes. No tutorials. Just React.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.reactchallenges.com/challenges/countdown" rel="noopener noreferrer"&gt;https://www.reactchallenges.com/challenges/countdown&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>frontendchallenge</category>
    </item>
    <item>
      <title>🚀 New React Challenge: Build a Timed Quiz</title>
      <dc:creator>ReactChallenges</dc:creator>
      <pubDate>Fri, 19 Dec 2025 13:11:42 +0000</pubDate>
      <link>https://dev.to/reactchallenges/new-react-challenge-build-a-timed-quiz-16ca</link>
      <guid>https://dev.to/reactchallenges/new-react-challenge-build-a-timed-quiz-16ca</guid>
      <description>&lt;p&gt;Test your &lt;strong&gt;React skills&lt;/strong&gt; by creating a quiz with randomized questions, a global timer, and step-based navigation using the provided components (&lt;code&gt;Question&lt;/code&gt;, &lt;code&gt;Timer&lt;/code&gt;, &lt;code&gt;QuizHeader&lt;/code&gt;, &lt;code&gt;Intro&lt;/code&gt;, &lt;code&gt;Result&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;💡 Simulates real test conditions: time limits, step progression, and precise scoring. Once done, create more questions to keep practicing!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.reactchallenges.com/challenges/react-quiz" rel="noopener noreferrer"&gt;https://www.reactchallenges.com/challenges/react-quiz&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>frontendchallenge</category>
    </item>
    <item>
      <title>🚀 New React Challenge: Digital Segment Clock</title>
      <dc:creator>ReactChallenges</dc:creator>
      <pubDate>Wed, 10 Dec 2025 12:49:39 +0000</pubDate>
      <link>https://dev.to/reactchallenges/new-react-challenge-digital-segment-clock-2dg0</link>
      <guid>https://dev.to/reactchallenges/new-react-challenge-digital-segment-clock-2dg0</guid>
      <description>&lt;p&gt;Level up your React skills with our latest beginner-friendly challenge! Build a real-time digital clock using seven-segment-style digits.&lt;/p&gt;

&lt;p&gt;No subscription required, &lt;strong&gt;completely free!&lt;/strong&gt; ✅&lt;/p&gt;

&lt;p&gt;Great for practicing state, effects, intervals, and Date object in React.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.reactchallenges.com/challenges/digital-segment-clock" rel="noopener noreferrer"&gt;https://www.reactchallenges.com/challenges/digital-segment-clock&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>devchallenge</category>
    </item>
  </channel>
</rss>
