<?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: Ceci Torres</title>
    <description>The latest articles on DEV Community by Ceci Torres (@cecitorresmx).</description>
    <link>https://dev.to/cecitorresmx</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%2F136530%2F3a4182db-0713-4f2d-bcdf-02b3e05534e8.png</url>
      <title>DEV Community: Ceci Torres</title>
      <link>https://dev.to/cecitorresmx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cecitorresmx"/>
    <language>en</language>
    <item>
      <title>Migrating a UI Component from Dojo.js to React.js</title>
      <dc:creator>Ceci Torres</dc:creator>
      <pubDate>Mon, 04 Sep 2023 23:38:00 +0000</pubDate>
      <link>https://dev.to/cecitorresmx/migrating-a-ui-component-from-dojojs-to-reactjs-14lg</link>
      <guid>https://dev.to/cecitorresmx/migrating-a-ui-component-from-dojojs-to-reactjs-14lg</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Web development is an ever-evolving field, and staying current with the latest technologies is crucial. As React.js gains widespread popularity for its component-based architecture, migrating UI components from Dojo.js to React.js has become a necessary step for many developers.&lt;/p&gt;

&lt;p&gt;In this article, we will walk you through the process of migrating a UI component, specifically a table, from Dojo.js to React.js. We'll pay special attention to the styling aspect, providing before-and-after examples for the table component.&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 1: Understanding the Dojo.js Component
&lt;/h1&gt;

&lt;p&gt;Before diving into the migration process, let's get acquainted with the Dojo.js table component we'll be working with. In our Dojo.js codebase, we have a table that displays data. Here's a simplified representation of how the table might look:&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="c1"&gt;// Dojo.js Component&lt;/span&gt;
&lt;span class="c1"&gt;// ...&lt;/span&gt;

&lt;span class="c1"&gt;// Example inline styling in Dojo.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tableStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;border-collapse: collapse;&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;cellStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;border: 1px solid #ccc; padding: 8px;&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;renderTable&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;tableNode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dojo-table&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Create the table element&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;table&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;table&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tableStyle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Create table rows and cells&lt;/span&gt;
  &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&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;row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tr&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&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="s2"&gt;age&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="s2"&gt;location&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;field&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;cell&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;td&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;cell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cellStyle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nx"&gt;cell&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;field&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
      &lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cell&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;tableNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Step 2: Setting Up Your React Project
&lt;/h1&gt;

&lt;p&gt;To begin the migration process, you need to set up a new React project. You can achieve this by using Create React App or your preferred React project setup method.&lt;/p&gt;

&lt;h1&gt;
  
  
  Step 3: Creating the React Table Component
&lt;/h1&gt;

&lt;p&gt;In React, we'll create a new component to replace our Dojo.js table. Here's the equivalent React component:&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;// React.js Component&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;ReactTable&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;data&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;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;table&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;"react-table"&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;thead&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;tr&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;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Name&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;th&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;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Age&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;th&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;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Location&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;th&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;tr&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;thead&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;tbody&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;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;tr&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;index&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="nt"&gt;td&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;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&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;td&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;td&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;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&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;td&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;td&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;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&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;td&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;tr&lt;/span&gt;&lt;span class="p"&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;lt;/&lt;/span&gt;&lt;span class="nt"&gt;tbody&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;table&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;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ReactTable&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Step 4: Migrating Styling
&lt;/h1&gt;

&lt;p&gt;In our Dojo.js example, styling is primarily done using inline styles, which can make the code harder to maintain and style consistency challenging to achieve. Here's a snippet of the inline styling applied to the Dojo.js table:&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="c1"&gt;// Example inline styling in Dojo.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tableStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;border-collapse: collapse;&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;cellStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;border: 1px solid #ccc; padding: 8px;&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;In the React.js example, we take a different approach by using CSS Modules for styling. Here's how the React component integrates styling:&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;// React.js Component with CSS Modules&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;styles&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;./ReactTable.module.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Importing CSS Module&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;ReactTable&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;data&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;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;table&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-table&lt;/span&gt;&lt;span class="dl"&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="nt"&gt;thead&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;tr&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;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Name&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;th&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;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Age&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;th&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;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Location&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;th&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;tr&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;thead&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;tbody&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;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;tr&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;index&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="nt"&gt;td&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;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&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;td&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;td&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;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&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;td&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;td&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;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&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;td&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;tr&lt;/span&gt;&lt;span class="p"&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;lt;/&lt;/span&gt;&lt;span class="nt"&gt;tbody&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;table&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;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;ReactTable&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Step 5: Integration
&lt;/h1&gt;

&lt;p&gt;To integrate the React table component into your project, import it and use it within your desired React component. Pass the necessary data as props, as shown earlier.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Migrating a UI component from Dojo.js to React.js is a comprehensive process that involves not only code but also styling. By adopting CSS Modules in React, we can achieve more maintainable and organized styling, making it easier to manage and enhance the user interface.&lt;/p&gt;

&lt;p&gt;With this migration, we not only embrace React's component-based architecture but also improve the maintainability and scalability of our codebase. The before-and-after styling examples illustrate the transition from inline styles to a more structured and modular styling approach.&lt;/p&gt;

&lt;p&gt;Remember that migration may require some effort, but it positions your project to benefit from React's component-based development and the broader React ecosystem. As you continue to migrate other components, you'll create a more cohesive and modern web application.&lt;/p&gt;

</description>
      <category>react</category>
      <category>dojojs</category>
      <category>frontend</category>
      <category>migration</category>
    </item>
    <item>
      <title>5 consejos para mejorar como desarrollador frontend</title>
      <dc:creator>Ceci Torres</dc:creator>
      <pubDate>Mon, 11 Apr 2022 07:26:12 +0000</pubDate>
      <link>https://dev.to/cecitorresmx/5-consejos-para-mejorar-como-desarrollador-frontend-236o</link>
      <guid>https://dev.to/cecitorresmx/5-consejos-para-mejorar-como-desarrollador-frontend-236o</guid>
      <description>&lt;h2&gt;
  
  
  1 Repasa los principios de desarrollo generales
&lt;/h2&gt;

&lt;p&gt;He notado que es muy común ver ejemplos de los principios de desarrollo solamente aplicados a el lado de backend. Pero estos principios no pertenecen a una sola rama, también puedes aplicarlos en el frontend. Por ejemplo RxJS utiliza el patrón "Observer", o React que hace uso del patrón "State".&lt;/p&gt;

&lt;p&gt;Aplicar los principios DRY o Single Responsibility Principle harán que la calidad de tu código se eleve hasta las nubes&lt;/p&gt;

&lt;h2&gt;
  
  
  2 Aprende sobre Design Systems
&lt;/h2&gt;

&lt;p&gt;Los Design Systems sirven para tener un estándar en el Look &amp;amp; Feel de un proyecto. Es una biblioteca de los componentes visuales de tu interfaz, y desarrollar pensando en esto te permite tener un diseño más limpio y estandarizado en todas tus vistas.&lt;/p&gt;

&lt;p&gt;Te recomiendo buscar mas acerca de herramientas como Storybook.js y Figma&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Documenta tus proyectos
&lt;/h2&gt;

&lt;p&gt;No tiene que ser nada sofisticado, con tener un buen Readme que explique de qué trata tu proyecto y cómo puede levantarse en local estas del otro lado. Dale un vistazo a &lt;a href="https://www.makeareadme.com/"&gt;https://www.makeareadme.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4 Unit testing
&lt;/h2&gt;

&lt;p&gt;El testing sigue siendo una área no tan valorada en el desarrollo de software. Y de las fases que más se suelen brincar cuando tenemos deadlines apretados. No podemos estar más equivocados al hacer esto. Las pruebas unitarias permiten a los programadores mantener y cambiar el código con mayor seguridad al paso del tiempo.&lt;/p&gt;

&lt;p&gt;Así al refactorizar el código o actualizar las bibliotecas del sistema en el futuro nos aseguramos de que el código aún funcione correctamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: Incluye Typescript a tu stack
&lt;/h2&gt;

&lt;p&gt;Hay quienes lo odian, hay quienes lo aman. Yo al principio veía más problemático el tener que incluir otra capa de complejidad a mis proyectos. Pero después comencé a ver los beneficios que Typescript aporta: código más legible, más fácil de mantener, feedback en vivo del IDE y mucho más.&lt;/p&gt;

&lt;p&gt;Dale una oportunidad, al principio la curva de aprendizaje será un poco difícil, pero verás que no te arrepentirás.&lt;/p&gt;

&lt;h2&gt;
  
  
  5 Distraete y no estudies todo el tiempo
&lt;/h2&gt;

&lt;p&gt;Me ha tocado ver a compañeros desgastarse horas y horas tratando de resolver un problema. Incluso a mi me llego a suceder, me quedaba enfrascada tanto tiempo hasta que no terminará lo que sea en lo que estaba trabajando, y después comenzaba a experimentar el para mi famoso “ya no veo que dice mi código”. Y no porque en verdad ya no pudiera ver, si no que más bien el estar tanto tiempo atorado con un problema hace que perdamos el enfoque y dejemos de ver el panorama completo.&lt;br&gt;
Así que recomiendo tomar descansos entre tus bloques de trabajo y parar de trabajar a la hora que termina tu jornada laboral. Es mucho más benéfico terminar de trabajar y que después te distraigas y despejes tu mente. Así podrás retomar al día siguiente con nueva energía y seguramente encontrarás la solución más rápido.&lt;/p&gt;

&lt;p&gt;Esos fueron los consejos del día. Escribe en los comentarios qué te parecieron. Gracias por leerme.&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Lecciones aprendidas como Lead Software Engineer, Parte 1</title>
      <dc:creator>Ceci Torres</dc:creator>
      <pubDate>Thu, 07 Apr 2022 05:37:11 +0000</pubDate>
      <link>https://dev.to/cecitorresmx/lecciones-aprendidas-como-lead-software-engineer-parte-1-3n50</link>
      <guid>https://dev.to/cecitorresmx/lecciones-aprendidas-como-lead-software-engineer-parte-1-3n50</guid>
      <description>&lt;p&gt;Hola, soy Cecilia y esta será una miniserie con algunas de las últimas lecciones que he aprendido en estos últimos meses como líder de un equipo de desarrolladores frontend.&lt;/p&gt;

&lt;p&gt;El primer tema con el que quiero arrancar es como reducir el código duplicado en tus proyectos de frontend. Pongamos un ejemplo, digamos que te han solicitado desarrollar una característica nueva en tu proyecto, leer y guardar un token de autenticación en el store de tu aplicación. Es la primera vez que creas esta funcionalidad, así que lo haces. Meses después, te asignan a un proyecto nuevo y te piden nuevamente que leas y guardes un token de autenticación en el store para esta aplicación y recuerdas “Hey! Yo ya he hecho esto antes”. Así que decides copiar y pegar el código que ya habías creado.&lt;/p&gt;

&lt;p&gt;Pasan los meses de nuevo y ¡qué crees! Adivinaste, un tercer proyecto aparece y necesita también el famoso token de autenticación. ¿Qué harás esta ocasión? ¿Volverás a copiar y pegar el código de nuevo? Suena tentador, lo sé. Es lo más fácil y sencillo de hacer, pero esta solución rápida nos deja con los siguientes problemas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿Qué pasa si llegan 5 proyectos nuevos? ¿Seguiremos copiando N veces más?&lt;/li&gt;
&lt;li&gt;¿Y sí además de leer y guardar el token ahora se necesita actualizar al momento de expirar? ¿Tendré que ir manualmente a cada proyecto a extender esta funcionalidad?&lt;/li&gt;
&lt;li&gt;¿O qué sucede si mi código tiene un error o encontré una manera más eficiente de manejar el token y necesito refactorizar? Nuevamente, tengo que ir a modificar el código en N proyectos diferentes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como ves, no siempre lo más sencillo es más conveniente a largo plazo. Una cualidad que diferencia a un desarrollador con poca experiencia a uno más experimentado es la capacidad de adelantarse y planear a futuro como sus desarrollos puede expandirse, el famoso “ver a futuro” que has escuchado mencionar. Y este es un buen ejemplo, cuando comienzas a detectar que una funcionalidad empieza a repetirse o necesitar en más de un proyecto, seguramente estás ante un candidato de código a encapsular y empaquetar.&lt;/p&gt;

&lt;p&gt;¿Has escuchado hablar del concepto DRY? Don't Repeat Yourself (No te repitas!) nos recuerda que cada comportamiento repetible en el código debe estar aislado (por ejemplo, separado en una función) para su reutilización. Este es un principio de diseño de software muy famoso y que si no habías escuchado hablar de él, te invito a investigar más acerca de este y otros más.&lt;/p&gt;

&lt;p&gt;Pero volvamos al ejemplo del token. Ya tenemos identificado el fragmento de código que necesitamos separar, ahora que sigue? Mi consejo sería crear un pequeño módulo npm que solo contenga la lógica necesaria para manipular el token. Recuerda dejar este código lo más aislado de reglas de negocio de los proyectos o detalles muy particulares de los mismos, o en otras palabras: que solo tenga un solo objetivo, en este caso manipular el token, ¡no más!. (Otro principio que te invito a investigar relacionado a esto: SRP o Single Responsibility Principle)&lt;br&gt;
Ya que has logrado crear tu nuevo módulo npm, ahora habrá que publicarlo en algún repositorio de módulos, puede ser en npm.js, github.com o alguno privado (sabías que GitLab tiene opción para esto? Si quisiera aprender como, déjame un comentario para saber que te interesa un artículo explicando más a detalle cómo funciona).&lt;/p&gt;

&lt;p&gt;Por último, la parte que más me emociona, borrar el código que ya hemos migrado y reemplazarlo instalando nuestro nuevo módulo npm (Esto me hizo recordar una de mis frases favoritas; “Los buenos programadores escriben un buen código. Los grandes programadores no escriben código. Los programadores Zen eliminan el código”) La funcionalidad debe seguir trabajando como si nada hubiese cambiado, los usuarios no notarán el cambio. Pero tu yo del futuro y otros programadores si lo harán, y verán los siguientes beneficios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Desarrollos más veloces cuando un nuevo proyecto necesite esta funcionalidad.&lt;/li&gt;
&lt;li&gt;Propagación de fixes de bugs encontrados o extensión de funcionalidades más veloces, ya que ahora se podrá mantener el módulo por separado y solo habrá que actualizar la versión de la librería en los proyectos donde se mande llamar.&lt;/li&gt;
&lt;li&gt;Reducción de código duplicado y estandarización de estrategias para resolver un mismo problema a lo largo de los proyectos de tu empresa&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como ves, los beneficios son muy atractivos y beneficios a largo plazo. ¿Has pensado en alguna funcionalidad de alguno de tus proyectos que podrías encapsular y reducir el código duplicado en tu trabajo? Platícame en los comentarios&lt;/p&gt;

&lt;p&gt;Gracias por leer, nos vemos en la próxima!&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>lead</category>
      <category>npm</category>
      <category>spanish</category>
    </item>
  </channel>
</rss>
