<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Danial Dezfouli</title>
    <description>The latest articles on Forem by Danial Dezfouli (@danialdezfouli).</description>
    <link>https://forem.com/danialdezfouli</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%2F593399%2Fdb2a2bd9-65be-48ff-9545-b461fed96c81.jpg</url>
      <title>Forem: Danial Dezfouli</title>
      <link>https://forem.com/danialdezfouli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/danialdezfouli"/>
    <language>en</language>
    <item>
      <title>React.js + Typescript Clean Architecture</title>
      <dc:creator>Danial Dezfouli</dc:creator>
      <pubDate>Thu, 09 Mar 2023 10:56:53 +0000</pubDate>
      <link>https://forem.com/danialdezfouli/reactjs-typescript-clean-architecture-5ig</link>
      <guid>https://forem.com/danialdezfouli/reactjs-typescript-clean-architecture-5ig</guid>
      <description>&lt;p&gt;writing clean code and having a clean architecture is always critical and mostly a challenge for junior developers.&lt;/p&gt;

&lt;p&gt;I started a repo to address some important stuff that a clean react.js codebase needs to have.&lt;/p&gt;

&lt;p&gt;feel free to contribute and improve it or ask for something in the issues:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/danialdezfouli/react-typescript-clean-architecture"&gt;https://github.com/danialdezfouli/react-typescript-clean-architecture&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>typescript</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>My New Spacecraft Browser Game with Vanilla JS</title>
      <dc:creator>Danial Dezfouli</dc:creator>
      <pubDate>Wed, 02 Feb 2022 22:07:17 +0000</pubDate>
      <link>https://forem.com/danialdezfouli/my-new-spacecraft-browser-game-with-vanilla-js-2ilg</link>
      <guid>https://forem.com/danialdezfouli/my-new-spacecraft-browser-game-with-vanilla-js-2ilg</guid>
      <description>&lt;p&gt;I enjoy creating mini-games or implementing interaction designs on the web.&lt;/p&gt;

&lt;p&gt;And here is the browser game I've made recently!&lt;/p&gt;

&lt;h3&gt;
  
  
  Source Code:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/danialdezfouli/spacecraft-game"&gt;https://github.com/danialdezfouli/spacecraft-game&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Demo:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://spacecraft.vercel.app/"&gt;https://spacecraft.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to ask questions or share your thoughts with me :)&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>css</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Finding Words in .srt Subtitle file</title>
      <dc:creator>Danial Dezfouli</dc:creator>
      <pubDate>Thu, 05 Aug 2021 21:31:53 +0000</pubDate>
      <link>https://forem.com/danialdezfouli/finding-words-in-subtitle-srt-2da9</link>
      <guid>https://forem.com/danialdezfouli/finding-words-in-subtitle-srt-2da9</guid>
      <description>&lt;h2&gt;
  
  
  I have created my first project with Go!
&lt;/h2&gt;

&lt;p&gt;With &lt;a href="https://github.com/danialdezfouli/subtitle-to-words"&gt;this tool&lt;/a&gt; you can easily have English words and their frequency in the subtitle files you have.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the Point?
&lt;/h2&gt;

&lt;p&gt;It would be a useful tool for non-native English speakers to learn the words which used in their TV-Series and Movies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/danialdezfouli/subtitle-to-words"&gt;https://github.com/danialdezfouli/subtitle-to-words&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>githunt</category>
    </item>
    <item>
      <title>💡 React Hooks: async function in the useEffect</title>
      <dc:creator>Danial Dezfouli</dc:creator>
      <pubDate>Fri, 04 Jun 2021 17:58:09 +0000</pubDate>
      <link>https://forem.com/danialdezfouli/what-s-wrong-with-the-async-function-in-useeffect-4jne</link>
      <guid>https://forem.com/danialdezfouli/what-s-wrong-with-the-async-function-in-useeffect-4jne</guid>
      <description>&lt;p&gt;When you're new to React Hooks, you may notice that you get warnings and bugs if you use an async function inside the useEffect Hook. Let's find out why this happens. &lt;/p&gt;

&lt;p&gt;There are dozens of articles and &lt;a href="https://stackoverflow.com/questions/53332321"&gt;issues&lt;/a&gt; about how to use async in the React Hooks:&lt;/p&gt;

&lt;h1&gt;
  
  
  Why is this happening?
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function"&gt;Async functions&lt;/a&gt; always return a promise so you will not have the actual value until the Promise is fulfilled.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anti-Pattern: async function directly in the useEffect
&lt;/h3&gt;

&lt;p&gt;React can run this async function but can not run the cleanup function.&lt;br&gt;
Don't use raw async function directly in the useEffect.&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;useEffect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hi :)&lt;/span&gt;&lt;span class="dl"&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bye!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// It won't run&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;h3&gt;
  
  
  Code example: using unmount in async functions.
&lt;/h3&gt;

&lt;p&gt;You don't have to unmount callback unless you use await expression before it.&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;unmount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hi :)&lt;/span&gt;&lt;span class="dl"&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bye!&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="p"&gt;})()&lt;/span&gt;
&lt;span class="nx"&gt;unmount&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;// Hi :)&lt;/span&gt;
&lt;span class="c1"&gt;// Bye!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Code example: using unmount in a function.
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;unmount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hi :)&lt;/span&gt;&lt;span class="dl"&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bye!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 👍 &lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;})()&lt;/span&gt;
&lt;span class="nx"&gt;unmount&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="c1"&gt;// Hi :)&lt;/span&gt;
&lt;span class="c1"&gt;// Bye!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Code example: using async function in the useEffect.
&lt;/h3&gt;

&lt;p&gt;You can create an async function in the useEffect callback, as Nick mentioned in &lt;a href="https://dev.to/stlnick/useeffect-and-async-4da8"&gt;his article&lt;/a&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="nx"&gt;useEffect&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;(&lt;/span&gt;&lt;span class="k"&gt;async&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;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;api&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="nx"&gt;setFilteredProducts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nx"&gt;setProducts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;products&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;unsubscribeOrRemoveEventHandler&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&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;I hope you find this article useful.&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
