<?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: Seanmclem</title>
    <description>The latest articles on DEV Community by Seanmclem (@seanmclem).</description>
    <link>https://dev.to/seanmclem</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%2F124304%2Ff149a1f5-7a88-407e-9c24-dcec9a6f3616.png</url>
      <title>DEV Community: Seanmclem</title>
      <link>https://dev.to/seanmclem</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/seanmclem"/>
    <language>en</language>
    <item>
      <title>Consuming a Stencil JS component in several frameworks</title>
      <dc:creator>Seanmclem</dc:creator>
      <pubDate>Sat, 15 Aug 2020 23:51:57 +0000</pubDate>
      <link>https://dev.to/seanmclem/consuming-a-stencil-js-components-in-several-frameworks-72p</link>
      <guid>https://dev.to/seanmclem/consuming-a-stencil-js-components-in-several-frameworks-72p</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The Stencil JS idea of writing a component once, and using it everywhere, is something I've been meaning to put into practice for a long time. This post will go over the easy and straightforward process of creating and publishing a simple Stencil component. Then, I'll go over consuming that component in React, Vue, and Angular. Anything more elaborate than the basics will be saved for the conclusion. Here we go! &lt;/p&gt;

&lt;h2&gt;
  
  
  Creating Stencil JS project
&lt;/h2&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm init stencil
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The CLI will give you a few options. In this example I am going to choose &lt;code&gt;component&lt;/code&gt;, and when prompted, name the project &lt;code&gt;test-demo-seanmclem&lt;/code&gt;. I've included my username in the project name to ensure it's unique. If the name is taken then you will not be able to publish to NPM.&lt;/p&gt;

&lt;p&gt;You will also need to change to your projects directory, and install the stencil dependency.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd test-demo-seanmclem
npm install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The Stencil CLI will create our project, but it will not just be a lone, single component as the name suggests. It will generate a full Stencil project with a &lt;code&gt;components&lt;/code&gt; folder. This folder will contain any components we wish export. The exported components will be included in the production build, published to NPM, and can then each be imported individually into consuming projects. The rest of the Stencil project helps facilitate publishing and consuming the project's components.&lt;/p&gt;

&lt;h3&gt;
  
  
  Our Stencil Component
&lt;/h3&gt;

&lt;p&gt;The Stencil CLI will add one example component to this components folder. It is called &lt;code&gt;my-component&lt;/code&gt;, and it takes 3 props, &lt;code&gt;first&lt;/code&gt;, &lt;code&gt;middle&lt;/code&gt;, and &lt;code&gt;last&lt;/code&gt;. Each being part of your name. The rendered component takes these inputs and outputs a string like &lt;code&gt;Hello, World!? I'm Your Full Name&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Run the following to prep the project for publishing&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Publish to NPM
&lt;/h2&gt;

&lt;p&gt;We're moving quickly because this project and &lt;code&gt;my-component&lt;/code&gt; already have everything we need. Let's publish it to NPM.&lt;/p&gt;

&lt;p&gt;You will need to have an account on NPM to proceed. It's simple and free to &lt;a href="https://www.npmjs.com/signup"&gt;sign-up&lt;/a&gt; if you haven't already. Then login to the CLI&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm login
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Follow the prompts to login to the CLI, and then run -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm publish
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If everything went well the CLI should return your new libraries name@version, like mine &lt;code&gt;test-demo-seanmclem@0.0.1&lt;/code&gt;. You can also find this in your npm settings&amp;gt;packages page.&lt;/p&gt;

&lt;h2&gt;
  
  
  React
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create project
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-react-app stencil-in-react
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Add component
&lt;/h3&gt;

&lt;p&gt;We will need to go the index.js file and add an import. We will not import a particular component though. Instead we will import a function that will &lt;em&gt;define&lt;/em&gt; all our components exported by the Stencil project, and make them available to the react project. This is how native web components, known as Custom Elements, are added to projects. They are typically registered globally as early as possible -rather than imported where ever they are needed. &lt;/p&gt;

&lt;p&gt;So we'll add an import to &lt;a href="https://github.com/Seanmclem/stencil-in-react/blob/master/src/index.tsx"&gt;index.js&lt;/a&gt; like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineCustomElements&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;test-demo-seanmclem/loader&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;And somewhere near the bottom we'll call this function. I'll go over polyfills later.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;defineCustomElements&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Next, in &lt;a href="https://github.com/Seanmclem/stencil-in-react/blob/master/src/App.tsx"&gt;app.js&lt;/a&gt; you utilize your new custom element&lt;br&gt;
&lt;/p&gt;

&lt;div class="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;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;App&lt;/span&gt;&lt;span class="dl"&gt;"&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;header&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;App-header&lt;/span&gt;&lt;span class="dl"&gt;"&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;img&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;logo&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;App-logo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;alt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;logo&lt;/span&gt;&lt;span class="dl"&gt;"&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;my&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Your&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="nx"&gt;middle&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Full&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="nx"&gt;last&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/my-component&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;/header&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;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;I replaced everything below the img tag in &lt;a href="https://github.com/Seanmclem/stencil-in-react/blob/master/src/App.tsx"&gt;my app.js&lt;/a&gt;.&lt;br&gt;
That's pretty much it. You can consume simple Stencil components with simple props in React without doing anything special. More complex components might require extra work for certain props and event listeners. I'd like to do another post on this soon, but that's it for React for now.&lt;/p&gt;
&lt;h2&gt;
  
  
  Vue
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Create project
&lt;/h3&gt;


&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g @vue/cli
vue create stencil-in-vue
cd stencil-in-vue
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Add component
&lt;/h3&gt;


&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install test-demo-seanmclem
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Now we'll add defineCustomElements to one of our main files. Specifically &lt;a href="https://github.com/Seanmclem/stencil-in-vue2/blob/master/src/main.js"&gt;main.js&lt;/a&gt; for Vue.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineCustomElements&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;test-demo-seanmclem/loader&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;And again, somewhere near the bottom we'll call this function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;defineCustomElements&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Next, in &lt;a href="https://github.com/Seanmclem/stencil-in-vue2/blob/master/src/App.vue"&gt;App.Vue&lt;/a&gt; you consume the custom element. You could place it above the HelloWorld component, but I removed it entirely&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;template&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"app"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Vue logo"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"./assets/logo.png"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;my-component&lt;/span&gt; &lt;span class="na"&gt;first=&lt;/span&gt;&lt;span class="s"&gt;"Your"&lt;/span&gt; &lt;span class="na"&gt;middle=&lt;/span&gt;&lt;span class="s"&gt;"Full"&lt;/span&gt; &lt;span class="na"&gt;last=&lt;/span&gt;&lt;span class="s"&gt;"Name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/my-component&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;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="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;App&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="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Angular
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create project
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g @angular/cli 
ng new stencil-in-angular
cd stencil-in-angular
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Add component
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install test-demo-seanmclem
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now we'll add an import to &lt;a href="https://github.com/Seanmclem/stencil-in-angular2/blob/master/src/main.ts"&gt;main.js&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineCustomElements&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;test-demo-seanmclem/loader&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;And somewhere near the bottom we'll call this function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;defineCustomElements&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Next, in &lt;a href="https://github.com/Seanmclem/stencil-in-angular2/blob/master/src/app/app.component.html"&gt;app.component.html&lt;/a&gt; you utilize your new custom element. I replaced pretty much everything in that file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"content"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"main"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;my-component&lt;/span&gt; &lt;span class="na"&gt;first=&lt;/span&gt;&lt;span class="s"&gt;"Your"&lt;/span&gt; &lt;span class="na"&gt;middle=&lt;/span&gt;&lt;span class="s"&gt;"Full"&lt;/span&gt; &lt;span class="na"&gt;last=&lt;/span&gt;&lt;span class="s"&gt;"Name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/my-component&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;That's it for the basic implementations of Stencil generated web-components in the big 3 frameworks. I'll be writing more on the topic going forward. So feel free to follow me for more. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion/More Info
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Polyfills
&lt;/h3&gt;

&lt;p&gt;These days you might be done supporting IE and legacy browsers. However, Stencil includes some optional polyfills for those that are easy to implement. You would just add an additional &lt;code&gt;applyPolyfills&lt;/code&gt; import to your &lt;code&gt;defineCustomElements&lt;/code&gt; import statement, and wrap your &lt;code&gt;defineCustomElements&lt;/code&gt; call in an async &lt;code&gt;applyPolyfills().then()&lt;/code&gt;. &lt;br&gt;
Read more about that &lt;a href="https://stenciljs.com/docs/react"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  React
&lt;/h3&gt;

&lt;p&gt;As I mentioned react has some complications with more advanced event and prop bindings. Most can be mitigated with a manual wrapping-component, or a &lt;code&gt;react-output-target&lt;/code&gt;. Read more about that &lt;a href="https://stenciljs.com/docs/react#properties-and-events"&gt;here&lt;/a&gt; also.&lt;/p&gt;

&lt;h3&gt;
  
  
  Angular ViewChild
&lt;/h3&gt;

&lt;p&gt;Angular docs call out a specialized way of accessing functions on your component. Which can be useful but not always necessary. Read more about that &lt;a href="https://stenciljs.com/docs/angular#accessing-components-using-viewchild-and-viewchildren"&gt;Here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>angular</category>
      <category>vue</category>
    </item>
    <item>
      <title>10 Concepts I'd like to learn in 2020 as a fullstack Javascript developer </title>
      <dc:creator>Seanmclem</dc:creator>
      <pubDate>Tue, 31 Dec 2019 20:29:30 +0000</pubDate>
      <link>https://dev.to/seanmclem/10-concepts-i-d-like-to-learn-in-2020-kpl</link>
      <guid>https://dev.to/seanmclem/10-concepts-i-d-like-to-learn-in-2020-kpl</guid>
      <description>&lt;p&gt;I'm a fullstack javascript developer, and here is my first post on Dev. I have set a goal for 2020 to write often.&lt;/p&gt;

&lt;p&gt;2019 has been a year full of new knowledge and experiences. However, 2020 will be a new year of opportunities to learn new things. Here is a list of concepts, in no very particular order, that I'd like to learn in 2020. I probably can't learn them all, but here is my wish-list. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Rust&lt;/p&gt;

&lt;p&gt;As a JS developer primarily I've never really dabbled much with lower-level languages. Rust seems like a great candidate and I like what I've been reading about it in 2019. I plan to do something, anything with it in 2020.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API"&gt;Web Sockets&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A colleague of mine recently said something like "it's 2019, every project like this should utilize web sockets." I've been meaning to learn more and try them out on a side project for a while.  Still, I have never really used them. In 2020 I will prioritize learning them. Maybe &lt;a href="https://github.com/socketio/socket.io"&gt;Socket.io&lt;/a&gt;, or &lt;a href="https://github.com/websockets/ws"&gt;ws&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tooling - webpack, parcel, rollup, babel, etc&lt;/p&gt;

&lt;p&gt;I'd like learn more about advanced tooling for projects. My experience with webpack, parcel, rollup, or babel has been a bit minimal up till now. Outside of a pre-configured CLI. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Static Sites&lt;/p&gt;

&lt;p&gt;I'm still not 100% sure how they differ from dynamic sites, and what benefits I might be missing out on. 2020 will be my year to put Gatsby and Next.js into practice and find out. I'm also looking forward to trying Netlify, Zeit now, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;GraphQL&lt;/p&gt;

&lt;p&gt;This one I've put off long enough and the buzz can no longer be ignored. From what I've read this could greatly improve how I query a db for data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Flutter&lt;/p&gt;

&lt;p&gt;I love the idea of write-once/run-everywhere. Capacitor has been great for me in 2019, and 2020 will hopefully be a good year for Flutter. The developments in Flutter for web might make things much more interesting.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;React Native&lt;/p&gt;

&lt;p&gt;I dabbled with it a bit in early 2019 but didn't really love the experience. With some recent updates, React Native for Web, and the even slight possibility of a &lt;a href="https://www.swyx.io/writing/react-native-web-singularity/"&gt;React Web Singularity&lt;/a&gt; -now I'm a bit more excited to try again.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Docker and Kubernetes&lt;/p&gt;

&lt;p&gt;These I have somehow avoided as I've focused on frontend a bit more the past couple years. I'm looking to step up my deployment game with some powerful and popular tools in 2020.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deno&lt;/p&gt;

&lt;p&gt;The new JS runtime from Ryan Dahl, the creator of NodeJS. It is a whole new, separate version of the sort of thing NodeJS is, but entirely from scratch. Most concerns he had with Node are addressed from the ground-up. It's still pretty new but I'm ready to begin poking around with it. Here's a good and &lt;a href="https://dev.to/lsagetlethias/deno-first-approach-4d0"&gt;recent Dev article&lt;/a&gt; about it. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Random JS concepts &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy"&gt;Proxies&lt;/a&gt;, &lt;/p&gt;

&lt;p&gt;They seem pretty powerful. Can they help me solve problems or develop more streamlined solutions? Let's find out.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://javascript.info/generators"&gt;JS Generators&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've been meaning to learn these but I'v been having trouble isolating a use case I'm interested in. 2020, be the year.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ES Modules&lt;/p&gt;

&lt;p&gt;Seem similar to imports/exports that I'm already using in my JS projects. How are they different? Learning opportunity.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Other advanced concepts&lt;/p&gt;

&lt;p&gt;Looking at you, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain"&gt;Prototypical inheritance&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's all I could come up with. If anyone has any feedback or ideas -please share. &lt;/p&gt;

&lt;p&gt;Happy New Year!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>newyear</category>
      <category>2020</category>
      <category>career</category>
    </item>
  </channel>
</rss>
