<?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: nightcoder</title>
    <description>The latest articles on DEV Community by nightcoder (@nightcoder).</description>
    <link>https://dev.to/nightcoder</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%2F291422%2Fbe9d4843-be34-47da-822b-37dd4c3a83a0.JPG</url>
      <title>DEV Community: nightcoder</title>
      <link>https://dev.to/nightcoder</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nightcoder"/>
    <language>en</language>
    <item>
      <title>How React saved my life.</title>
      <dc:creator>nightcoder</dc:creator>
      <pubDate>Wed, 09 Sep 2020 07:07:42 +0000</pubDate>
      <link>https://dev.to/nightcoder/how-react-saved-my-life-2afg</link>
      <guid>https://dev.to/nightcoder/how-react-saved-my-life-2afg</guid>
      <description>&lt;p&gt;&lt;strong&gt;If you are :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;having doubts about your coding "level" to start learning React,&lt;/li&gt;
&lt;li&gt;at a decent "level" of knowledge of JavaScript but don't feel ready to start learning a front-end framework yet,&lt;/li&gt;
&lt;li&gt;learning JS and got tired/discouraged/bored or burnt out,&lt;/li&gt;
&lt;li&gt;working on a beautiful front-end project that makes you feel like 1000+ lines of codes are a bit much all in ONE JS file,&lt;/li&gt;
&lt;li&gt;in need of some novelty/excitement/challenge/motivation in your coding journey,&lt;/li&gt;
&lt;li&gt;thinking React is NOT for you cause it's too difficult,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;this post might be for you!!!&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;By the quite dramatic title of this post,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ashskz1P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ab0bc6y5c2ijob868fmk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ashskz1P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ab0bc6y5c2ijob868fmk.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;what i really mean is: &lt;br&gt;
as a JS learner, React &lt;strong&gt;reactivated&lt;/strong&gt;💡 my drive/focus to keep learning and make progress with JavaScript + &lt;strong&gt;boosted&lt;/strong&gt;🚀 my overall coding confidence. &lt;br&gt;
I was feeling lost in a Javascript sea, somehow "tired" of vanilla JS...Hard to admit, because i love JS and i love writing code. That's why i do feel like React pretty much saved my life. Or at least my learning journey!&lt;/p&gt;

&lt;p&gt;The plan of this article:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why/How did i finally jump into React?&lt;/li&gt;
&lt;li&gt;
How much JavaScript did i know when i started with React recently? &lt;/li&gt;
&lt;li&gt;React "philosophy": how steep is the learning curve exactly?&lt;/li&gt;
&lt;li&gt;The HUGE Benefits of starting learning React&lt;/li&gt;
&lt;li&gt;Are you ready to start? / You think you're not ready&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  So here's how it all started.
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;The trigger&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I was roaming the youtube streets in search of advice/inspiration when i saw this comment:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QUEPM_SR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/f7mp6uv29pyi72iknthr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QUEPM_SR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/f7mp6uv29pyi72iknthr.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a short snippet of what this viewer wrote, but it's the part that struck me the most: he had put words onto this thing i had been feeling for a few weeks at this point. "nearly HATE JavaScript" may sound intense, but i could totally relate! &lt;br&gt;
For me personally, just before meeting React, JavaScript had become quite difficult, somehow dry. Or maybe it was the learning journey itself (that was becoming difficult and dry)...&lt;br&gt;
Anyways, this very comment sparked something in me: "oh cool i'm not alone to feel that way!" and quickly: "i'm starting React tomorrow!"&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The extra push&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Shortly after that, I received a DM on twitter from my 100DaysOfCode friend Danny (who has experience as a developer) encouraging me to try implementing &lt;strong&gt;with a framework&lt;/strong&gt; the vanilla JS todo app i was working on! &lt;br&gt;
I could have chosen Vue.js as many people say Vue is the easiest front-end framework to learn, ideal for beginners! Which sounds great, but i thought "React!!!" because that's what i chose for the Roadmap of my coding journey and knowing i'll &lt;strong&gt;spend time&lt;/strong&gt; learning a framework anyway (i follow the "learning by doing" method so it takes me some time to finish one project!) it'll be more time efficient for me to just jump into React.&lt;br&gt;&lt;br&gt;
It took me some more time (3 weeks?) to feel "ready" to follow Danny's advice and i finally started to implement my todo app with React!🚀 &lt;br&gt;
I actually had to rebuild it from the ground up! &lt;br&gt;
But here i am today, 100% learning React, todo app almost ready, having a real blast at it, more excited than ever to swim in JavaScript!&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How much JS did i know when i started with React:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;general JS syntax (but still learning new things and tricks almost everyday lol)&lt;/li&gt;
&lt;li&gt;DOM manipulations and template literals, like:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;todayDiv&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;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#today&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;week&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;tuesday&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;wednesday&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;friday&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;saturday&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sunday&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;day&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;div class="tuesday"&amp;gt; Hello! Today is &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;week&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="s2"&gt;. Have a nice day!&amp;lt;/div&amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;todayDiv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;insertAdjacentHTML&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;afterbegin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;day&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;fetch data from an API + HTTP requests&lt;/li&gt;
&lt;li&gt;sense of what a promise is (#3LW for the connoisseurs😋) but without being able to explain it like a pro (unlike fetch()😎) but i knew fetch() is a promise (or rather, fetch() &lt;em&gt;returns&lt;/em&gt; a promise, giving us access to methods like &lt;code&gt;.then()&lt;/code&gt; or &lt;code&gt;.catch()&lt;/code&gt;) but i'll write/explain about &lt;code&gt;fetch&lt;/code&gt; in another article soon!&lt;/li&gt;
&lt;li&gt;array methods/higher order functions like &lt;code&gt;forEach()&lt;/code&gt; and &lt;code&gt;map()&lt;/code&gt;, &lt;code&gt;filter()&lt;/code&gt; and the other array methods like &lt;code&gt;sort()&lt;/code&gt;, &lt;code&gt;push()&lt;/code&gt; to add at the end of an array and &lt;code&gt;unshift()&lt;/code&gt; to push at the beginning! (&lt;em&gt;sidenote&lt;/em&gt;: when displaying a dynamic list for example, the &lt;code&gt;unshift()&lt;/code&gt; method is very useful to make the dynamically added items appear at the TOP of the list and not at the bottom... 😉 )&lt;/li&gt;
&lt;li&gt;callbacks (in array methods/higher order functions for example)&lt;/li&gt;
&lt;li&gt;basic knowledge of CLI (&lt;strong&gt;C&lt;/strong&gt;ommand-&lt;strong&gt;L&lt;/strong&gt;ine &lt;strong&gt;I&lt;/strong&gt;nterface aka terminal)&lt;/li&gt;
&lt;li&gt;OOP basics (&lt;strong&gt;O&lt;/strong&gt;bject &lt;strong&gt;O&lt;/strong&gt;riented &lt;strong&gt;P&lt;/strong&gt;rogramming) : it means i was able to create classes and use/understand the "this" keyword, without being utterly confused lol&lt;/li&gt;
&lt;li&gt;basic knowledge of how JS works under the hood, which is very exciting to learn! (the callstack, lexical environment, execution context etc...) - but you absolutely don't need to know that to start React. We have to know and understand how JS works under the hood in order to become better JS developers in general, not to learn React.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What was i scared of or impressed by:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the spread operator &lt;code&gt;...&lt;/code&gt;: i had NEVER used it and had no idea what it was for! I used to find it very intimidating&lt;/li&gt;
&lt;li&gt;destructuring: scary because too abstract/complicated for me (that's what i thought) &lt;/li&gt;
&lt;li&gt;writing promises other then fetch() in my code
&lt;/li&gt;
&lt;li&gt;writing &lt;code&gt;async&lt;/code&gt; functions + use &lt;code&gt;await&lt;/code&gt; keyword, i have to be honest here 😅&lt;/li&gt;
&lt;li&gt;using libraries (except for moment.js ❤️ ): i had never used bootstrap or any other library&lt;/li&gt;
&lt;li&gt;React. plain and simple.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  React "philosophy" : steep learning curve?
&lt;/h2&gt;

&lt;p&gt;React isn't that difficult for a JS beginner with some "basic" but steady knowledge.&lt;br&gt;
React offers a &lt;em&gt;different&lt;/em&gt; approach for seeing and coding our websites. It's not as hard as you think. Trust me.&lt;br&gt;
In fact, it's quite clever, powerful and fun!&lt;/p&gt;

&lt;p&gt;This &lt;em&gt;different&lt;/em&gt; approach is based on 2 main things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1- Think Component!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No-brainer alert: a website or app is a construction &lt;strong&gt;built&lt;/strong&gt; of different elements (navbar/menu, sections/pages, footer etc...). We agree on that.&lt;br&gt;
So we can see these elements as the &lt;strong&gt;components&lt;/strong&gt; of the website. &lt;br&gt;
Well, that's React rule#1 in a nutshell!&lt;/p&gt;

&lt;p&gt;In the code, you write the components as a class (class component) or a function (functional component). 1 (one) JS file per component. No variable naming conflicts anymore and cherry on top: components are reusable! of course! reusable in other projects (a contact form for example!), or in the same project several times (a button!)&lt;/p&gt;

&lt;p&gt;So any component will be created like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;class component:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;MyComponent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;//some code&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;by the way:&lt;/em&gt; the &lt;code&gt;Component&lt;/code&gt; class that we extend to create our components comes from React!😉&lt;br&gt;
We import it at the very top of the file.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you can write the same as a function (functional component):
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;MyComponent&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
   &lt;span class="c1"&gt;//some code&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;arrow function? yes:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="c1"&gt;// some code&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;OK. Look at the snippet below. This is the full code for an actual real component. &lt;br&gt;
Let's say the title component of a website.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;class component:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Title&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;I&lt;/span&gt; &lt;span class="nx"&gt;am&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;motherf&lt;/span&gt;&lt;span class="o"&gt;*****&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt; &lt;span class="nx"&gt;Title&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;website&lt;/span&gt;&lt;span class="o"&gt;!!!&lt;/span&gt; &lt;span class="nx"&gt;Sway&lt;/span&gt;&lt;span class="o"&gt;!!!&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;same component, functional:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;I&lt;/span&gt; &lt;span class="nx"&gt;am&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;motherf&lt;/span&gt;&lt;span class="o"&gt;*****&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt; &lt;span class="nx"&gt;Title&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;website&lt;/span&gt;&lt;span class="o"&gt;!!!&lt;/span&gt; &lt;span class="nx"&gt;Sway&lt;/span&gt;&lt;span class="o"&gt;!!!&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;arrow function, yes please:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Title&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;I&lt;/span&gt; &lt;span class="nx"&gt;am&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;motherf&lt;/span&gt;&lt;span class="o"&gt;***&lt;/span&gt;&lt;span class="nx"&gt;ing&lt;/span&gt; &lt;span class="nx"&gt;Title&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;website&lt;/span&gt;&lt;span class="o"&gt;!!!&lt;/span&gt; &lt;span class="nx"&gt;Sway&lt;/span&gt;&lt;span class="o"&gt;!!!&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;I know. Your brain is shouting: "HEY WAIT! isn't that HTML that i see in the return statement?"&lt;br&gt;
Well, no. It's... &lt;strong&gt;JSX&lt;/strong&gt;!&lt;br&gt;
And have you noticed the &lt;code&gt;render()&lt;/code&gt;method in the class component? It belongs to the Component class of React and is responsible for displaying, &lt;strong&gt;rendering&lt;/strong&gt; the JSX! As you can see, functional components have no &lt;code&gt;render()&lt;/code&gt;, which makes sense: they're not classes! They just use the &lt;code&gt;return&lt;/code&gt; statement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JSX, or: Forget about your index.html file!&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;To create the components we want, forget about the traditional index.html file. React uses &lt;strong&gt;JSX&lt;/strong&gt;. &lt;br&gt;
You could see JSX as "JS disguised as html-on-steroids".&lt;br&gt;
So JSX is actual JavaScript that looks 100% like html! &lt;br&gt;
That's why i would say that there's almost no learning curve there.&lt;br&gt;
You can write things like &lt;code&gt;&amp;lt;div&amp;gt; &amp;lt;/div&amp;gt;&lt;/code&gt; (many classic html tags are possible!!) but also &lt;code&gt;&amp;lt;MyComponent&amp;gt; &amp;lt;/MyComponent&amp;gt;&lt;/code&gt; or self-closing &lt;code&gt;&amp;lt;MyComponent /&amp;gt;&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;So in other words: React "generates" the html of our project. I know. "WAIT! WHAT? REACT GENERATES THE HTML???" yes! you got it! Sorry if i spoiled the big reveal but that's an essential and exciting part of React. &lt;br&gt;
For the styling? classic CSS file. Or, to reduce the number of files and because it's super handy, it's also possible to write CSS in JS! There are many options to do that, but you'll discover them very soon! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2- The "state". What👏🏾 does👏🏾 it👏🏾 mean👏🏾 ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The other thing that's &lt;em&gt;different&lt;/em&gt; is the way React handles our variables/data and the behaviour of our components!&lt;br&gt;
Let me put it this way: &lt;strong&gt;in React, our components will behave on screen the way we want them to, based on their change of state&lt;/strong&gt;.&lt;br&gt;
In other words, our components on screen are "reacting" to updates (or changes) of the variables/data they are responsible for, their &lt;strong&gt;state&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In our code, the &lt;strong&gt;state&lt;/strong&gt; is simply an object!&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="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="na"&gt;key&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="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;
&lt;span class="c1"&gt;// etc...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;state&lt;/strong&gt; is defined by YOU when creating your class component. It will &lt;strong&gt;store the data&lt;/strong&gt; or &lt;strong&gt;starting point value&lt;/strong&gt; used by the component that needs it.&lt;br&gt;
(&lt;em&gt;sidenote&lt;/em&gt;: the &lt;strong&gt;state&lt;/strong&gt; is "initialised" in class components only! It can also be handled by functional components, with the React HOOKS! I used to be so impressed by this word when in fact that's all it is: built-in React methods to manage state within functional components! But that's another story you'll be reading soon 😉 ).&lt;/p&gt;

&lt;p&gt;So for example, to create a classic Counter component, you would write:&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;class&lt;/span&gt; &lt;span class="nx"&gt;Counter&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;count&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="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="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;count&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="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;This means that the starting point of our Counter is zero. &lt;br&gt;
Now: everytime the &lt;strong&gt;state&lt;/strong&gt; of the Counter (count : 0) will be incremented or decremented, React will &lt;strong&gt;render&lt;/strong&gt; or &lt;strong&gt;re-render&lt;/strong&gt; (again and again) the Counter with its updated count on the screen. &lt;br&gt;
How does it work under the hood? Well, it's too complicated to explain right now and i actually couldn't😋  but just to give you the main thing: React uses a virtual DOM and there's React.createElement()... &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forget about DOM manipulations😈 !&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;In React, you do NOT get to manipulate the DOM😈 !!! It's over.😭 But wait! React is awesome, trust me on this one.&lt;br&gt;
React "creates" the html we need and handles the DOM manipulations we want to achieve.&lt;br&gt;
Under the hood: React.createElement(), remember?&lt;br&gt;
As we said earlier,  React &lt;strong&gt;renders&lt;/strong&gt; (or &lt;strong&gt;re-renders&lt;/strong&gt;) the components according to their &lt;strong&gt;state&lt;/strong&gt; (update of a timer or dark-mode toggle for example).&lt;br&gt;
This whole rendering thing corresponds to what's called the component's &lt;strong&gt;lifecycle&lt;/strong&gt;. In React, we say that we "mount"/"unmount" components, or components are "mounted"/"unmounted", various libraries use terms like "enter", "active", "exit" referring to the component! You see what i mean? &lt;/p&gt;

&lt;p&gt;So how can we increment or decrement a counter if we can't manipulate the DOM ourselves? &lt;br&gt;
Well, it gets done with built-in React methods!!😉  Let's not forget it's all JavaScript, so of course it comes with very cool and easy to use built-in methods!&lt;br&gt;
The main one is: &lt;code&gt;setState()&lt;/code&gt;. You will be using it all the time! &lt;code&gt;this.setState()&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;in our Counter component, it would look like:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Counter&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;count&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="nx"&gt;incrementCounter&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;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;count&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;count&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;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; 
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;incrementCounter&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;Click&lt;/span&gt; &lt;span class="nx"&gt;me&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;increment&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;counter&lt;/span&gt; &lt;span class="nx"&gt;below&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;     &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&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;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;count&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;   &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Not that crazy complicated, you see? &lt;br&gt;
And this counter works perfectly! You press the button and the number in the div just below increases! (you need to add some css of course😋 but you know how to do that!)&lt;br&gt;
I know you still might have some reservations but i'm sure you understand this simple counter by just reading the code. Self-explanatory enough, right?&lt;br&gt;
Everytime we press the button, it &lt;strong&gt;changes&lt;/strong&gt; the &lt;strong&gt;state&lt;/strong&gt; of our Counter &lt;strong&gt;component&lt;/strong&gt; (in this example we increment it) , so React &lt;strong&gt;re-renders&lt;/strong&gt; our updated Counter each time we click the button!🤩&lt;/p&gt;

&lt;p&gt;So now when you'll hear about &lt;strong&gt;state management&lt;/strong&gt;, you'll know it's about handling the changes of &lt;strong&gt;state&lt;/strong&gt; of a component. Or, the &lt;strong&gt;sharing&lt;/strong&gt; of the state between several components! You'll be facing this situation very often and early on! &lt;br&gt;
And you will get it, i guarantee it.&lt;/p&gt;

&lt;p&gt;These 2 things, &lt;strong&gt;Components&lt;/strong&gt; and &lt;strong&gt;State&lt;/strong&gt; are at the core of what you probably have heard people refer to as the &lt;em&gt;"React philosophy"&lt;/em&gt;. &lt;br&gt;
Indeed, things are handled quite &lt;em&gt;differently&lt;/em&gt;, but it's absolutely possible to start learning it now, even if like me, you're not a JS Jedi yet!😅&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The HUGE Benefits of starting to learn React now.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Jump / Progress in JS knowledge&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Because of React's class components, you will improve your OOP practice : you'll be writing a certain amount of  &lt;code&gt;this.state.myStuff&lt;/code&gt;, &lt;code&gt;this.setState({ key : value })&lt;/code&gt;, &lt;code&gt;this.state.otherStuff&lt;/code&gt;, &lt;code&gt;this.myMethod&lt;/code&gt;, &lt;code&gt;this.otherMethodOfMine&lt;/code&gt;...&lt;/li&gt;
&lt;li&gt;Faster than you know, you'll spend your time destructuring the state (it sounds so complicated now but trust me it is so simple once you are within React).
Also, you will have to use the spread operator &lt;code&gt;...&lt;/code&gt;😬 all the time! Check this out: &lt;code&gt;[...array]&lt;/code&gt; is the same as &lt;code&gt;array.slice()&lt;/code&gt;. And  &lt;code&gt;.slice()&lt;/code&gt; is the array method to &lt;em&gt;make a copy&lt;/em&gt; of an array. You'll need it a lot in React, to change/update the state! Indeed, you'll learn that &lt;strong&gt;the state is immutable&lt;/strong&gt; and it has consequences. But don't panic, React has several major built-in methods to deal with that.&lt;/li&gt;
&lt;li&gt;You can be 100% confident that your JS knowledge will seriously rocket or at least strengthen, by learning React!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Today i'm so unimpressed by the spread operator and i'm destructuring the shht out of everything!😂 &lt;br&gt;
And it's only been 2 full weeks of learning sofar! You can do it too, for real. Just take your time, to each his/her own pace. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get quicker to the goal of finding a junior dev job!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's be honest: React is very popular on the job market. &lt;br&gt;
I think the sooner you jump into it, the better. You HAVE TO learn JavaScript  anyway! So why not do it with React? 1 stone 2 birds. But poor birds😢 so 1 stone 2 skips!! (much more than 2..😉 ) &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discovery of many great libraries, dependencies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;React comes in with a plethora of available tools, libraries, dependencies, which are also very good for you to try. It will make you feel more at ease with web &lt;em&gt;development&lt;/em&gt; in general.&lt;br&gt;&lt;br&gt;
From &lt;em&gt;webpack&lt;/em&gt; to bundle the project to &lt;em&gt;react-bootstrap&lt;/em&gt; or &lt;em&gt;material-UI&lt;/em&gt; for layout, &lt;em&gt;react-spring&lt;/em&gt; for animations, &lt;em&gt;styled.components&lt;/em&gt; or &lt;em&gt;emotion&lt;/em&gt; to write CSS- in-JS (very cool!) and the list goes on!&lt;br&gt;
This is how i quickly came to a real understanding - almost awakening - of what it really means to BUILD projects. This is all architecture! How great!!!&lt;br&gt;
Of course that's not all there is behind the concept of "building" a project but we're getting there!&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  You ARE ready to start! 👊🏾
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--etr2eihk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ys2819ozquqv37o84ocp.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--etr2eihk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ys2819ozquqv37o84ocp.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yeah, now is the moment when you drop everything you were doing and start learning React! &lt;/p&gt;

&lt;p&gt;1- create a folder for your very first React project! yes let's do it!&lt;br&gt;
2- open the terminal (make sure to locate yourself within this new folder you just created) and type: &lt;code&gt;npx create-react-app my-app&lt;/code&gt;&lt;br&gt;
3- once the installation is complete in the terminal, you can read:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; cd my-app
 npm start

Happy hacking!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3- so, type as they say: &lt;code&gt;cd my app&lt;/code&gt; and hit enter😉&lt;br&gt;
4- now type: &lt;code&gt;npm start&lt;/code&gt;, hit enter, wait a moment, wait...&lt;br&gt;
AND BOOM!🚀 the magic is starting!&lt;br&gt;
Welcome to React my fellow learner!&lt;/p&gt;

&lt;p&gt;Good luck on your journey!!! i'm still at it and having a lot of fun! Let's keep learning!✊🏾&lt;br&gt;
All the best, and thank you for reading!&lt;/p&gt;

&lt;p&gt;See you in the next article (shorter i &lt;strong&gt;promise&lt;/strong&gt;😋).&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>WHAT IS THE LOCAL STORAGE? HOW TO USE IT?</title>
      <dc:creator>nightcoder</dc:creator>
      <pubDate>Mon, 10 Aug 2020 08:28:00 +0000</pubDate>
      <link>https://dev.to/nightcoder/what-is-the-local-storage-how-to-use-it-369c</link>
      <guid>https://dev.to/nightcoder/what-is-the-local-storage-how-to-use-it-369c</guid>
      <description>&lt;p&gt;&lt;strong&gt;If you need to:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;save the value of some sort of counter and not have it reset to 0 each time you refresh the page&lt;/li&gt;
&lt;li&gt;save the user's input.value somewhere (because you need to)&lt;/li&gt;
&lt;li&gt;keep dynamically created data on the screen AFTER a browser refresh&lt;/li&gt;
&lt;li&gt;or anything like that&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Well, good news: that's what &lt;code&gt;localStorage&lt;/code&gt; is here for!!!🤩&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Let's dive into it
&lt;/h3&gt;

&lt;p&gt;The project i'll be using as an example here is my TO-DO list, as it is exactly the kind of situation where we would really need to use localStorage.&lt;br&gt;
In a TO-DO app, the user types something he wants to add to the list (in the input field) and when he presses the "add" or "submit" button, it gets added to the screen. &lt;/p&gt;

&lt;p&gt;To achieve that, we "manipulate" the DOM 😈, using one of the following methods: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement"&gt;&lt;code&gt;createElement()&lt;/code&gt;&lt;/a&gt; + &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Node/appendChild"&gt;&lt;code&gt;appendChild()&lt;/code&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;or the one dear to my heart: &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML"&gt;&lt;code&gt;insertAdjacentHTML()&lt;/code&gt;&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;You can click on each of them to see more information, in case you are not yet familiar with DOM manipulation.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rRYsHab0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sm5oybd1accwszl7nx1g.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rRYsHab0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sm5oybd1accwszl7nx1g.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Cool!&lt;/p&gt;

&lt;p&gt;But there's a &lt;strong&gt;problem&lt;/strong&gt;: everytime we refresh the page, it all goes away... There's no onscreen persistence of the items we add. &lt;br&gt;
&lt;strong&gt;Once we hit the refresh button of our browser, our list goes empty&lt;/strong&gt;.🔄 😭 We need to fix this!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3C5kjDGO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/alexnid60865qmgiurxy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3C5kjDGO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/alexnid60865qmgiurxy.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's precisely when &lt;code&gt;localStorage&lt;/code&gt; comes into play!&lt;br&gt;
The Local Storage is a sort of browser database, that can save our data as strings (key/value pair objects).&lt;br&gt;
You can see the Local Storage in the devtools: instead of "console"😉, go to "application" (you might need to click on the little double-arrow on the right to have access to it). &lt;br&gt;
Here it is:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3Ua-u2W---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kq4o40maxhp5kweut6mj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3Ua-u2W---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kq4o40maxhp5kweut6mj.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is where we can store our data!!&lt;/p&gt;
&lt;h3&gt;
  
  
  Here's how.
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;To create a storage:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;localStorage.setItem("mySuperStorage","yay!")&lt;/code&gt;&lt;br&gt;
If you open a new tab in your browser, type that code in your console (+ press enter), you'll see the following🤩: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M6Hi4ZRn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/biyibbakx2z5zbd2jhdt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M6Hi4ZRn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/biyibbakx2z5zbd2jhdt.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As simple as that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To retrieve the data we stored:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;localStorage.getItem("mySuperStorage")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--418Qn4pC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jrs7cf5xqtd7829hxb8c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--418Qn4pC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jrs7cf5xqtd7829hxb8c.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Okay, and how does this work really?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Under the hood&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;localStorage is a property of the Window object&lt;/li&gt;
&lt;li&gt;it stores data permanently (unless you erase it, we'll see how below)&lt;/li&gt;
&lt;li&gt;there is one localStorage per website/domain&lt;/li&gt;
&lt;li&gt;which means that it doesn't matter if you have multiple tabs of the same website opened, it's the same localStorage as long as you are on this website (which is great!)&lt;/li&gt;
&lt;li&gt;maximum size is about 5mb (which is plenty for storing key/value pairs. They are just strings, very light!)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;In our code&lt;/strong&gt;, localStorage comes in with 5 built-in methods.&lt;br&gt;
The ones we'll use all the time are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;localStorage.setItem(name, content)&lt;/code&gt;: setItem() lets you create your storage(s). The 1st parameter is the name you want to give to your storage, the 2nd parameter is what you want to put in this storage. You can create as many storages as you want!&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;localStorage.getItem(name)&lt;/code&gt;: getItem() lets you retrieve the data you stored in the storage. You have to specify the name of the data you want (= the name that you gave to your storage).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;localStorage.clear()&lt;/code&gt;: the &lt;code&gt;clear()&lt;/code&gt; method erases everything from the storage. No parameter needed, quick and easy!&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Now let's implement it in our TODO app example!
&lt;/h3&gt;

&lt;p&gt;We're going to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create a storage with localStorage.setItem()&lt;/li&gt;
&lt;li&gt;
store each new task added by the user, in that storage! &lt;/li&gt;
&lt;li&gt;display all the todos stored in the storage after the user refreshes the browser or closes the window and comes back!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For now, our localStorage is empty. It hasn't been initialized yet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b8txHjnf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9jahautzccy6f0w1ul8n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b8txHjnf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9jahautzccy6f0w1ul8n.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a&gt;1- Let's create a storage with localStorage.setItem()&lt;/a&gt;&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;const&lt;/span&gt; &lt;span class="nx"&gt;todoStorage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;  
&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TODO-app storage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&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;todoStorage&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;1st line of code:
&lt;code&gt;const todoStorage = []&lt;/code&gt;: this creates an empty array (which will store all the todos entered by the user)&lt;/li&gt;
&lt;li&gt;now let's break the 2nd line of code in 2 parts:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;localStorage.setItem("TODO-app storage",&lt;/code&gt;: this piece of code creates a storage named "TODO-app storage" in our localStorage. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;JSON.stringify(todoStorage)&lt;/code&gt;: this part will turn the data we put in the storage into strings.
Let's not forget that &lt;strong&gt;everything is a string in localStorage&lt;/strong&gt; BUT in our JavaScript code, under the hood, our data is actually in JSON format (JavaScript Object Notation). So it HAS to be turned into strings in order to be stored in localStorage. 
To do that, thankfully we have the built-in &lt;code&gt;JSON.stringify()&lt;/code&gt;  method!
(Now is the moment you might ask: "so, to retrieve the data from localStorage we will need to do the opposite, right? turn the strings back into JSON format?" yes absolutely!!! you got it!
It gets done using the &lt;code&gt;JSON.parse()&lt;/code&gt; method.
We'll use it shortly.)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point, if we check our localStorage, we see this🤩:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qJstNpQw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7mv5yf2zj3z5wqg0k1iv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qJstNpQw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7mv5yf2zj3z5wqg0k1iv.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Our storage is called "TODO-app storage" as we wanted, and it is an empty array &lt;code&gt;[]&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a&gt;2- Let's store each new task added by the user, in the storage! &lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1- &lt;code&gt;const todo = { task: input.value };&lt;/code&gt; : this is what the user types in the input and that we display on the screen. we declare a "todo" variable to be an object with a property we choose to call "task", which stores the value (the text) that gets typed in the input by the user. &lt;br&gt;
2- &lt;code&gt;todoStorage.push(todo);&lt;/code&gt; : easy array method &lt;code&gt;push()&lt;/code&gt;to add the todo to the array todoStorage, the empty one we created earlier. &lt;br&gt;
3- &lt;code&gt;localStorage.setItem("TODO-app storage", JSON.stringify(todoStorage));&lt;/code&gt; : now we set the Local Storage content to be that of our array todoStorage!&lt;br&gt;
let's wrap all that in a function that we could call storeTodos():&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;storeTodos&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;todo&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;input&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="nx"&gt;todoStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TODO-app storage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;todoStorage&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's invoke that function when the submit button is clicked for example!&lt;br&gt;
We should see our localStorage in action!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TibjMRKK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5yu0xec1wa8vuwc7esq7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TibjMRKK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5yu0xec1wa8vuwc7esq7.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a&gt;3- Let's display all the todos stored in the localStorage after the user refreshes the browser or even closes the window and comes back!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We'll manage to do that in 2 steps:&lt;br&gt;
1- a function to display the todos:&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;displayTodos&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;todoStorage&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;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;TODO-app storage&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&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;todoStorage&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="nx"&gt;todo&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userItem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;li class="my-css"&amp;gt;
                      &amp;lt;i class="far fa-square"&amp;gt;&amp;lt;/i&amp;gt;                     
                      &amp;lt;p class="my-css"&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/p&amp;gt;
                      &amp;lt;i class="far fa-trash-alt"&amp;gt;&amp;lt;/i&amp;gt;
                     &amp;lt;/li&amp;gt;`&lt;/span&gt;&lt;span class="p"&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;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.todo-list&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;insertAdjacentHTML&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;beforeend&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userItem&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;Quick breakdown of this code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;JSON.parse(localStorage.getItem('TODO-app storage'))&lt;/code&gt; : this is the JSON.parse() method we were talking about earlier! &lt;strong&gt;When we save data to the storage: we need to JSON.stringify().&lt;/strong&gt; 
&lt;strong&gt;when we get our data from the storage, we need to JSON.parse().&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;||[]&lt;/code&gt; : it means todoStorage is either the JSON.parse() of todoStorage (which means it exists) OR &lt;code&gt;||&lt;/code&gt; it's an empty array (if nothing has been stored yet)&lt;/li&gt;
&lt;li&gt;As you can see the rest is a DOM manipulation using template literal (very handy to render dynamically created HTML) + the insertAdjacentHTML() method!&lt;/li&gt;
&lt;li&gt;both &lt;code&gt;&amp;lt;i class="far fa-square"&amp;gt;&amp;lt;/i&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;i class="far fa-trash-alt"&amp;gt;&amp;lt;/i&amp;gt;&lt;/code&gt; are from Fontawesome! The &lt;code&gt;&amp;lt;i&amp;gt;&lt;/code&gt; tags mean "icon" and allow us to display Fontawesome library icons!
If you don't know Fontawesome, click &lt;a href="https://fontawesome.com/icons?d=gallery"&gt;here&lt;/a&gt; to check it out! &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2- adding an event listener to the window to detect when the page gets refreshed (or closed and reopened). It is called the &lt;strong&gt;DOMContentLoaded&lt;/strong&gt; event. It's another event we can listen too, just like 'click' or 'keydown'! &lt;br&gt;
We'll invoke the displayTodos function at that moment:&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="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DOMContentLoaded&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;displayTodos&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://res.cloudinary.com/practicaldev/image/fetch/s--BE4tQ-uf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3d0o6vwmbuab2evm3vn8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BE4tQ-uf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3d0o6vwmbuab2evm3vn8.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Aaand that's a wrap!! The users of our TODO-app can refresh the page or close and reopen the browser: their list will still be on screen, like a real application!😎&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LjJwVOT1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/01r05byepibxy5knvwrl.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LjJwVOT1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/01r05byepibxy5knvwrl.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
That was it for today about the Local Storage! &lt;br&gt;
I hope this article was somewhat helpful or that it could give you some inspiration/ideas for your own projects.&lt;/p&gt;

&lt;p&gt;Let me know in the comments below if there's any aspect you would like me to develop further or if you have any question/remark/suggestion.&lt;/p&gt;

&lt;p&gt;For now, thank you for reading.&lt;/p&gt;

&lt;p&gt;Next article next week!🤙🏾&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>100daysofcode</category>
    </item>
  </channel>
</rss>
