<?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: Brad Beggs</title>
    <description>The latest articles on DEV Community by Brad Beggs (@brad_beggs).</description>
    <link>https://dev.to/brad_beggs</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%2F451529%2Fe320f4f0-b1f2-4d36-a6ce-b03e4c8568c7.jpg</url>
      <title>DEV Community: Brad Beggs</title>
      <link>https://dev.to/brad_beggs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/brad_beggs"/>
    <language>en</language>
    <item>
      <title>Interesting CSS Practices - Interesting Ideas from The Top 6 Search Results</title>
      <dc:creator>Brad Beggs</dc:creator>
      <pubDate>Fri, 19 Mar 2021 00:30:39 +0000</pubDate>
      <link>https://dev.to/brad_beggs/interesting-css-practices-interesting-ideas-from-the-top-6-search-results-4g7g</link>
      <guid>https://dev.to/brad_beggs/interesting-css-practices-interesting-ideas-from-the-top-6-search-results-4g7g</guid>
      <description>&lt;p&gt;&lt;a href="https://www.google.com/search?q=css+best+practices&amp;amp;oq=css+best+pra&amp;amp;aqs=chrome.0.0l2j69i57j0l3j69i60l2.3506j0j4&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8" rel="noopener noreferrer"&gt;Google CSS Best Practices&lt;/a&gt; and you get plenty of useful but duplicated ideas. &lt;/p&gt;

&lt;p&gt;But, among the non-duplicated are a few ideas that might need sharing: &lt;/p&gt;

&lt;h3&gt;
  
  
  Organize Stylesheets Using a Header to Footer Structure
&lt;/h3&gt;

&lt;p&gt;Or said differently, if certain styles exist only &lt;em&gt;at&lt;/em&gt; certain points in the page, sort your CSS in a hierarchical manner. This lets you and your team quickly sense where the related CSS is (though yes, you can  &lt;code&gt;CTRL-F&lt;/code&gt; to find the CSS style name)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;Generic&lt;/span&gt; &lt;span class="nt"&gt;classes&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;.)&lt;/span&gt;
&lt;span class="nf"&gt;#header&lt;/span&gt;
&lt;span class="nf"&gt;#nav-menu&lt;/span&gt;
&lt;span class="nf"&gt;#main-content&lt;/span&gt;
&lt;span class="nf"&gt;#aside&lt;/span&gt;
&lt;span class="nf"&gt;#footer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create the HTML Structure First, CSS Second
&lt;/h3&gt;

&lt;p&gt;HTML is about the structure for you, the browser, search engines, and screen readers. Build the structure first using modern semantic elements (e.g. &lt;code&gt;&amp;lt;form&amp;gt;, &amp;lt;table&amp;gt;,  &amp;lt;article&amp;gt;&lt;/code&gt;, and then add styling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Text-transform to Style Text Properties into a “Standard” across your site
&lt;/h3&gt;

&lt;p&gt;If your data has inconsistent capitalization, use &lt;code&gt;text-transform&lt;/code&gt; to push the content where you need it. &lt;/p&gt;

&lt;p&gt;Great for titles, headlines, names, which requires capitalization of each word.&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;text&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;capitalize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="s2"&gt;```





```&lt;/span&gt;&lt;span class="nx"&gt;javascript&lt;/span&gt;
&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lowercase&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for that art house modern look.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design Mobile One Column First
&lt;/h3&gt;

&lt;p&gt;It is easier to expand the content to fit more space than to figure out how to take that same content and make it one column.  &lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;@media (min-width: 768px)&lt;/code&gt; to go mobile-first. So in this example, one the browser is 768px or larger, it switches to the (persumed) desktop version) &lt;/p&gt;

&lt;h3&gt;
  
  
  Use (or don’t use) The SRP - Single Responsibility Principle
&lt;/h3&gt;

&lt;p&gt;Borrowing from &lt;a href="https://dev.to/prototyp/improve-your-css-with-these-5-principles-35jd"&gt;PROTOTYP&lt;/a&gt; here on Dev, pay attention if your styles take on multiple chores. Breaking out responsibility allows the style to extend and combine easily with other styles.&lt;/p&gt;

&lt;p&gt;But! &lt;a href="https://www.smashingmagazine.com/2013/10/challenging-css-best-practices-atomic-approach/" rel="noopener noreferrer"&gt;There is a good case for not following SRP.&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="c1"&gt;// Do This:&lt;/span&gt;
&lt;span class="cm"&gt;/* Shared styles */&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;rem&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;font&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="cm"&gt;/* Style extensions */&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;radialBorder&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;border&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="nx"&gt;rem&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;button&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;large&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;font&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;rem&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;button&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;eb4934&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;button&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;secondary&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;888&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="c1"&gt;// Don’t Do This&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;rem&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;font&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;border&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="nx"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;eb4934&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="nx"&gt;fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;font&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bold&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;button&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;secondary&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;border&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;radius&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;font&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;888&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;
  
  
  Use BEM Framework
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://getbem.com/" rel="noopener noreferrer"&gt;BEM&lt;/a&gt; = Block, Element, Modifier is a pattern for writing your styles and giving them names.  &lt;/p&gt;

&lt;p&gt;In fact, the above CSS is written following BEM. &lt;/p&gt;

&lt;p&gt;From MDN:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In BEM a block is a stand-alone entity such as a button, menu, or logo. An element is something like a list item or a title that is tied to the block it is in. A modifier is a flag on a block or element that changes the styling or behavior. You will be able to recognize code that uses BEM due to the extensive use of dashes and underscores in the CSS classes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Keep Outline Highlights
&lt;/h3&gt;

&lt;p&gt;Some fellow humans need to use the keyboard and some just like using the keyboard. The box outline lets us keyboard users know which element we are focused on.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Bad Don’t Do This&lt;/span&gt;
&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;focus&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;none&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 the outline do its job:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2AO46YMp_-UZPNFpQtqXbVYQ.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2AO46YMp_-UZPNFpQtqXbVYQ.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://code.tutsplus.com/tutorials/30-css-best-practices-for-beginners--net-6741" rel="noopener noreferrer"&gt;30 CSS Best Practices&lt;/a&gt; &lt;br&gt;
&lt;a href="https://www.w3schools.com/html/html5_semantic_elements.asp" rel="noopener noreferrer"&gt;HTML Semantic Elements&lt;/a&gt; &lt;br&gt;
&lt;a href="https://dev.to/liaowow/8-css-best-practices-to-keep-in-mind-4n5h"&gt;8 SCSS Best Practices To Keep in Mind&lt;/a&gt; &lt;br&gt;
&lt;a href="https://dev.to/prototyp/improve-your-css-with-these-5-principles-35jd"&gt;PROTOTYP&lt;/a&gt;&lt;br&gt;
&lt;a href="http://getbem.com/" rel="noopener noreferrer"&gt;BEM&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Organizing" rel="noopener noreferrer"&gt;Organize Your CSS - MDN&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.webtips.dev/10-best-practices-for-quickly-improving-your-css" rel="noopener noreferrer"&gt;10 Best Practices for Quickly Improving Your CSS &lt;/a&gt; &lt;/p&gt;

</description>
      <category>css</category>
    </item>
    <item>
      <title>Testing Terms, Frameworks, Explained Like a 5th Grader</title>
      <dc:creator>Brad Beggs</dc:creator>
      <pubDate>Fri, 12 Mar 2021 15:54:59 +0000</pubDate>
      <link>https://dev.to/brad_beggs/testing-terms-frameworks-explained-like-a-5th-grader-1g7n</link>
      <guid>https://dev.to/brad_beggs/testing-terms-frameworks-explained-like-a-5th-grader-1g7n</guid>
      <description>&lt;h3&gt;
  
  
  What are Some Popular(ish) Test Tools for Javascript Development?
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://mochajs.org/"&gt;Mocha&lt;/a&gt;&lt;/em&gt; - a testing framework (but doesn’t do assertion).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://www.chaijs.com"&gt;Chai&lt;/a&gt;&lt;/em&gt; - an assertion library (used alongside Mocha) to compare output of a unit test to an expected value. To assert: a confident statement of fact. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://sinonjs.org/"&gt;Sinon.js&lt;/a&gt;&lt;/em&gt; - allows simulation of real objects, functions, state, networks calls, database queries, etc in an isolated environment (so you can’t break anything and can pinpoint issues). Make spies, stubs, and mocks.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://www.npmjs.com/package/fetch-mock"&gt;Fetch-Mock&lt;/a&gt;&lt;/em&gt; - mock up/create fake http requests via &lt;code&gt;fetch&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://www.npmjs.com/package/node-fetch"&gt;Node-Fetch&lt;/a&gt;&lt;/em&gt; - lets you fetch from node.js using similar syntax as &lt;code&gt;window.fetch&lt;/code&gt; (aka the "normal" fetch used in a browser).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://www.selenium.dev/"&gt;Selenium&lt;/a&gt;&lt;/em&gt; - automate browser actions/behaviors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Types of Testing
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Behavior-Driven Development (BDD)&lt;/em&gt;  - code written in an executable style that is understood by the team, the clients, other stakeholders and focuses on ensuring the product (not the code, per se) does what is expected . BDD extends the idea of Test-Driven Development.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Test-Driven Development (TDD)&lt;/em&gt; - code written for developers (by developers or test-developers) to test code functionality.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Unit/Component Testing&lt;/em&gt; - testing one small element of the software. This is considered the base level of testing since the element in consideration can’t be functionally smaller.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Integration Testing&lt;/em&gt; - unlike unit, integration testing takes various elements and tests how they work together. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Regression Testing&lt;/em&gt; - check changes or additions to the code don’t break previously working code. If previously working code did break, it moved backward (i.e. regressed) to a less developed state.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interesting Non-obvious Testing Terms Defined
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Mocks/Mocking&lt;/em&gt; - making a fake version of a function, database, or some service to stand in place of the real thing. Allows you to add, delete, change, recreate without concern for ruining a real thing. In the Theater world, this is your dress rehearsal.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Stubs&lt;/em&gt; - related to mocking, but not quite the same. A stub stands in for a lower-level code module/component/function since the code module isn’t finished. When you call a stub it gives the same output as the code will, once finished. Stubs provide a predetermined response. In carpentry and plumbing, stubbing refers to placing most of the pipe but it isn’t ready for use.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Spies&lt;/em&gt; - like their real-world counterpart, a spy records information, such as arguments, the return value, exceptions thrown.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Doubles/Test Doubles&lt;/em&gt; - a generic term for any fake/pretend thing used in place of the real.  Comes from the idea of a stunt double in movies. &lt;/p&gt;

&lt;h3&gt;
  
  
  References &amp;amp; Recommended Further Reading
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://martinfowler.com/articles/mocksArentStubs.html"&gt;Mocks Aren’t Stubs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://blog.testlodge.com/tdd-vs-bdd/"&gt;TDD vs BDD&lt;/a&gt; &lt;br&gt;
&lt;a href="https://www.softwaretestinghelp.com/the-difference-between-unit-integration-and-functional-testing/"&gt;Differences Between Unit &amp;amp; Integration Testing&lt;/a&gt; &lt;br&gt;
&lt;a href="https://dev.to/thejessleigh/different-types-of-testing-explained-1ljo"&gt;Different Types of Testing Explained&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/maxwell_dev/the-testing-introduction-i-wish-i-had-2dn"&gt;The Testing Intro I Wish I Had&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>JS Function Hoisting Concisely Explained </title>
      <dc:creator>Brad Beggs</dc:creator>
      <pubDate>Sat, 06 Mar 2021 23:40:07 +0000</pubDate>
      <link>https://dev.to/brad_beggs/js-function-hoisting-concisely-explained-3ll</link>
      <guid>https://dev.to/brad_beggs/js-function-hoisting-concisely-explained-3ll</guid>
      <description>&lt;h3&gt;
  
  
  Terms to Know
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Execution Context&lt;/strong&gt; (which is different from scope, btw) - an abstract concept where the code runs. First by parsing the code line by line and second, storing variables and the functions into memory. Two of the three contexts are &lt;code&gt;global&lt;/code&gt; and &lt;code&gt;local&lt;/code&gt; execution contexts. For good reads on execution context, check out the two articles in the reference section below.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Declaration&lt;/strong&gt; (of a variable or function) - Example of variable declaration are &lt;code&gt;let a&lt;/code&gt;, &lt;code&gt;const result&lt;/code&gt;, while a function declaration is &lt;code&gt;function calcSquareFootage(x,y){ // code}. Declaration brings a thing into existence. Note that a&lt;/code&gt;function expression` is hoisted differently and explained below. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Initializing&lt;/strong&gt; (variables only) - &lt;code&gt;a=1.567&lt;/code&gt; or declare and initialize together: ‘const result = 234.53&lt;code&gt;. You can initialize in JS variables without declaring them using &lt;/code&gt;let&lt;code&gt;, &lt;/code&gt;const&lt;code&gt;, or the ghastly &lt;/code&gt;var`. But doing so will cause a bug as the undeclared but initialized variable is now a globally accessed variable.  Initializing is often called an assignment. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hoisting&lt;/strong&gt; - is a concept and not an actual process. All declarations (variable and function) are first placed into memory during the compile phase while initializing/assignment happens later. &lt;/p&gt;

&lt;h3&gt;
  
  
  Hoisting Functions
&lt;/h3&gt;

&lt;p&gt;You can try these in your browser console. To clear the variables declarations and assignment, hard refresh this page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule of thumb&lt;/strong&gt; - declare named functions, function expressions, anonymous functions, or arrow functions before you invoke them.&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;addThreeNumbers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4564&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// successfully returns 4575 even if invoked before the function declaration &lt;/span&gt;

&lt;span class="c1"&gt;// function declaration&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;addThreeNumbers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&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="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="nx"&gt;multiplyThreeNumbers&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4564&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Uncaught ReferenceError: multiplyThreeNumbers is not defined. &lt;/span&gt;

&lt;span class="c1"&gt;// function expression is hoisted but assigned an `undefined` value rather then the function code&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;multiplyThreeNumbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&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="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; 


&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// Uncaught ReferenceError: Cannot access 'add' before initialization&lt;/span&gt;

&lt;span class="c1"&gt;//arrow function initialization is hoisted the same as a function expression, thus `add` is assigned undefined in this cause using ‘let add`  &lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&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="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Order of Precedence in Hoisting is a Thing
&lt;/h3&gt;

&lt;p&gt;What happens if you declare a function and a variable with the same name?&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;let&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;Brad&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;

&lt;span class="c1"&gt;// notice function has same name as variable above&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;firstName&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="s2"&gt;`hi  &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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;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="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// output is string&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Variable assignments before a function declarations&lt;/li&gt;
&lt;li&gt;But, function declarations before variable declarations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Rule of Thumb&lt;/strong&gt; - don’t use the same name for a variable and a function&lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://blog.bitsrc.io/understanding-execution-context-and-execution-stack-in-javascript-1c9ea8642dd0"&gt;Understanding Execution Context and Execution Stack in Javascript&lt;/a&gt;&lt;br&gt;
&lt;a href="https://levelup.gitconnected.com/learn-javascript-fundamentals-scope-context-execution-context-9fe8673b3164"&gt;Understanding JavaScript Execution Context and How It Relates to Scope and the &lt;code&gt;this&lt;/code&gt; Context&lt;/a&gt; &lt;br&gt;
&lt;a href="https://dmitripavlutin.com/javascript-hoisting-in-details/#5-function-declarations"&gt;Hoisting Functions &amp;amp; Function Expressions&lt;/a&gt; &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Writing Thunks Workflow</title>
      <dc:creator>Brad Beggs</dc:creator>
      <pubDate>Sat, 27 Feb 2021 19:44:28 +0000</pubDate>
      <link>https://dev.to/brad_beggs/writing-thunks-workflow-50b1</link>
      <guid>https://dev.to/brad_beggs/writing-thunks-workflow-50b1</guid>
      <description>&lt;p&gt;&lt;strong&gt;Pre-req:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/redux-thunk"&gt;Install thunks&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Get organized - Create a &lt;code&gt;thunks.js&lt;/code&gt; or a folder &lt;code&gt;./thunks/&lt;/code&gt; and the appropriate file names to group the related thunks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Import &lt;code&gt;action-creators&lt;/code&gt; from the appropriate file(s) into your thunk file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write your thunk(s). &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new &lt;code&gt;reducer&lt;/code&gt; or update other &lt;code&gt;reducers&lt;/code&gt; as appropriate and import any needed &lt;code&gt;actions&lt;/code&gt;.&lt;br&gt;
4.1. If creating a new &lt;code&gt;reducer&lt;/code&gt;, &lt;code&gt;import&lt;/code&gt; it to store.js and add the &lt;code&gt;reducer&lt;/code&gt; to your reducers object.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the component needing the &lt;code&gt;thunk&lt;/code&gt;, import the &lt;code&gt;thunk&lt;/code&gt;, add it to the appropriate &lt;code&gt;props&lt;/code&gt;, &lt;code&gt;mapState&lt;/code&gt;, and &lt;code&gt;mapProps&lt;/code&gt;, and place the &lt;code&gt;thunk&lt;/code&gt; function were needed in the component.  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Resources &amp;amp; References
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/redux-thunk"&gt;Redux-Thunk Official&lt;/a&gt;&lt;br&gt;
&lt;a href="https://medium.com/fullstack-academy/thunks-in-redux-the-basics-85e538a3fe60"&gt;What Are Thunks?&lt;/a&gt; &amp;lt;-the best article on Thunks and how they work&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A Useful Flow to Using Redux</title>
      <dc:creator>Brad Beggs</dc:creator>
      <pubDate>Sat, 20 Feb 2021 01:36:29 +0000</pubDate>
      <link>https://dev.to/brad_beggs/a-useful-flow-to-using-redux-hmp</link>
      <guid>https://dev.to/brad_beggs/a-useful-flow-to-using-redux-hmp</guid>
      <description>&lt;h3&gt;
  
  
  Assumptions:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;you've installed Redux and have the &lt;code&gt;store.js&lt;/code&gt; file setup&lt;/li&gt;
&lt;li&gt;&lt;p&gt;you want a suggestion as to a ‘logical’ flow for when to write &lt;code&gt;actions&lt;/code&gt;, &lt;code&gt;reducers&lt;/code&gt;, &lt;code&gt;component&lt;/code&gt; integration &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Note: You don’t need to do any of these steps in order but you do need to do each step. Try this method and make up your own method as you go forward.* &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1 - Create Stateless Components and the GUI
&lt;/h3&gt;

&lt;p&gt;Start with hard-coded data for the time being. &lt;/p&gt;

&lt;p&gt;I’ve found making components this way forces me to think more about their relationships, what the state looks like, and what components could get reused. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 - Add Boilerplate
&lt;/h3&gt;

&lt;p&gt;In the component(s) needing state or props, add the redux boiler plate code and don't worry if they're empty now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// SomeCoolComponent.js file &lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;connect&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;react-redux&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;   &lt;span class="c1"&gt;// every component using mapState or mapDispatch needs this&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SomeCoolComponent&lt;/span&gt; &lt;span class="o"&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;destructuredPropsHere&lt;/span&gt;&lt;span class="p"&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="c1"&gt;// component code…...&lt;/span&gt;

  &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// add the 3 boiler plate lines below at end of file &lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mapStateToProps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;state&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="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mapDispatchToProps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;dispatch&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="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mapStateToProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mapDispatchToProps&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="nx"&gt;TheParentComponentNameHere&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3 - Create a Redux Folder Structure
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add &lt;code&gt;./src/redux/&lt;/code&gt; folder to group your &lt;code&gt;store.js&lt;/code&gt;, &lt;code&gt;reducers.js&lt;/code&gt;,  and &lt;code&gt;actions.js&lt;/code&gt; together. This makes it easier to find items and keep focused.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you have a lot of &lt;code&gt;actions&lt;/code&gt; or &lt;code&gt;reducers&lt;/code&gt;, create a sub-folder and divide the &lt;code&gt;actions&lt;/code&gt; and &lt;code&gt;reducers&lt;/code&gt; into related files. For example, &lt;code&gt;fetchActions.js&lt;/code&gt;, &lt;code&gt;addToCartActions.js&lt;/code&gt;, or a &lt;code&gt;loginReducer.js&lt;/code&gt;.  &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4 - Create Your Action(s) and Actions Creator(s)
&lt;/h3&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// actions&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ISCOMPLETED_TODO&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ISCOMPLETED_TODO&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;  
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ADDSINGLEITEM&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ADD_SINGLE_ITEM_TO_STATE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;// action creators&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;setSingleItem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ADDSINGLEITEM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;markToDoAsComplete&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&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="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ISCOMPLETED_TODO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   
  &lt;span class="na"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;text&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;While very optional, action creators let you easily reuse the object they create. If it seems redundant, it is, on a small scale; but in a larger code base, just type in the action creator name and you get the object.   &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5 - Create or Update  Reducer(s) with  Action(s)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Import your ‘actions’ if you are using them (‘actions’ differ from ‘action creators’ )&lt;/li&gt;
&lt;li&gt;Create your a &lt;code&gt;switch&lt;/code&gt; statement or update a &lt;code&gt;switch&lt;/code&gt; with a new &lt;code&gt;case&lt;/code&gt; statement
&lt;/li&gt;
&lt;li&gt;Every &lt;code&gt;case&lt;/code&gt; needs a &lt;code&gt;return&lt;/code&gt; with the new state
*Remember to include a &lt;code&gt;default: return state&lt;/code&gt; for your &lt;code&gt;switch&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;CREATE_TODO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;REMOVE_TODO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;ISCOMPLETED_TODO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./actions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;toDos&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="nx"&gt;action&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="p"&gt;{&lt;/span&gt; 
    &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// other cases removed for space&lt;/span&gt;

    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="na"&gt;ISCOMPLETED_TODO&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;

      &lt;span class="k"&gt;return&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;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;toDo&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;if&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;text&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;text&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="nx"&gt;toDo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;isCompleted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="nx"&gt;toDo&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nl"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;state&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;
  
  
  Step 5 - Back in Your Component - Import &amp;amp; Props
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Import the appropriate &lt;code&gt;action creator(s)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add the appropriate &lt;code&gt;props&lt;/code&gt; as destructured arguments&lt;/li&gt;
&lt;li&gt;Add the &lt;code&gt;state&lt;/code&gt; data into &lt;code&gt;mapStateToProps&lt;/code&gt; in object form&lt;/li&gt;
&lt;li&gt;Add the &lt;code&gt;action creator&lt;/code&gt; to &lt;code&gt;mapDispatchToProps&lt;/code&gt; in object shorthand form &amp;lt;-recommended method by Redux&lt;/li&gt;
&lt;li&gt;Add the &lt;code&gt;state&lt;/code&gt; and the &lt;code&gt;callback&lt;/code&gt; function into the appropriate spot.
&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="c1"&gt;// ToDoList.js for a to do tracking app&lt;/span&gt;
&lt;span class="c1"&gt;// other imports omitted for clarity &lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;connect&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;react-redux&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;removeToDo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;markToDoAsComplete&lt;/span&gt;&lt;span class="p"&gt;,&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;./redux/actions&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// action creators, used in mapDispatch&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ToDoList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;toDos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;   
  &lt;span class="nx"&gt;onRemovePressed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="nx"&gt;markComplete&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="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;list-wrapper&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;// ...some code here &lt;/span&gt;

      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;toDos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;toDo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&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="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ToDoListItem&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="nx"&gt;toDo&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
          &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
          &lt;span class="nx"&gt;onRemovePressed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;onRemovePressed&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;   &lt;span class="c1"&gt;// callback function&lt;/span&gt;
          &lt;span class="nx"&gt;markComplete&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;markComplete&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;         &lt;span class="c1"&gt;// callback function    &lt;/span&gt;
        &lt;span class="sr"&gt;/&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="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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mapStateToProps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;toDos&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;toDos&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;mapDispatchToProps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;dispatch&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="na"&gt;onRemovePressed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;removeToDo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
    &lt;span class="na"&gt;markComplete&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;markToDoAsComplete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mapStateToProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mapDispatchToProps&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="nx"&gt;ToDoList&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Now Finished
&lt;/h3&gt;

&lt;p&gt;At this point, you should have everything correctly wired for your casual react app. While a few tutorials (see the to-do code above) help, my understanding improved when I used it for my own project app (outdoor adventure rentals).  &lt;/p&gt;

&lt;p&gt;Also, if you haven’t installed the React Developer Chrome extension (link below), install it.  It gives a nice visual of your store. &lt;/p&gt;

&lt;h3&gt;
  
  
  Just The Steps
&lt;/h3&gt;

&lt;p&gt;Step 1 - Create Stateless Components&lt;br&gt;
Step 2 - Add Boilerplate&lt;br&gt;
Step 3 - Create a Redux Folder Structure&lt;br&gt;
Step 4 - Create Your Action(s) and Actions Creator(s)&lt;br&gt;
Step 5 - Back in Your Component - Import &amp;amp; Props&lt;/p&gt;

&lt;h3&gt;
  
  
  References &amp;amp; Resources
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://dev.to/hudsonmc/redux-cheatsheet-4i43"&gt;A Deeper Redux CheatSheet - Less Flow, More How&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://react-redux.js.org/introduction/basic-tutorial"&gt;Official React-Redux Tutorial&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://chrome.google.com/webstore/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd?hl=en"&gt;React Developer Chrome Extension&lt;/a&gt;&lt;/p&gt;

</description>
      <category>redux</category>
      <category>react</category>
    </item>
    <item>
      <title>A Few Interesting Bits About package-lock.json. #yesReally</title>
      <dc:creator>Brad Beggs</dc:creator>
      <pubDate>Fri, 12 Feb 2021 07:41:20 +0000</pubDate>
      <link>https://dev.to/brad_beggs/a-few-interesting-bits-about-package-lock-json-yesreally-14mo</link>
      <guid>https://dev.to/brad_beggs/a-few-interesting-bits-about-package-lock-json-yesreally-14mo</guid>
      <description>&lt;p&gt;&lt;code&gt;package-lock.json&lt;/code&gt; seems like a really, really dull file. And ideally, it is. &lt;/p&gt;

&lt;p&gt;It is like the keys on your keyboard which you don't notice until they get crunchy (looking at you butterfly and silicon-based keyboards).&lt;/p&gt;

&lt;p&gt;But do enough &lt;code&gt;package&lt;/code&gt; installs and you'll run into issues. This article is a high-level overview of the what and the why of &lt;code&gt;package.json&lt;/code&gt; and &lt;code&gt;package-lock.json&lt;/code&gt; so you can debug with understanding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The purpose of the &lt;code&gt;package-lock.json&lt;/code&gt; is to let every developer on a repo have the same package tree, meaning each developer has the exact same packages and &lt;em&gt;all dependencies&lt;/em&gt; versions as you, even if there are new packages available.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Should You Care?
&lt;/h3&gt;

&lt;p&gt;Depending on how the &lt;code&gt;package.json&lt;/code&gt; is written, an &lt;code&gt;npm install&lt;/code&gt; command could install a more recent patch, a minor update, or the exact same package.  If the packages and their dependencies are different, it might not cause an issue….or it might.  &lt;/p&gt;

&lt;p&gt;The &lt;code&gt;package-lock.json&lt;/code&gt; is used by NPM when you &lt;code&gt;npm install&lt;/code&gt; and the lock file is set in digital stone; whereas, &lt;code&gt;package.json&lt;/code&gt; just indicates major package dependencies, how to handle updates and is meant to be changed by a developer. &lt;/p&gt;

&lt;p&gt;Think of &lt;code&gt;package.json&lt;/code&gt; as what you want to install and the &lt;code&gt;lock&lt;/code&gt; file as what exactly and precisely was installed. &lt;/p&gt;

&lt;h3&gt;
  
  
  How Package.json Controls Updates via SemVer
&lt;/h3&gt;

&lt;p&gt;A key part of package version control is with &lt;a href="https://semver.org/"&gt;SemVer&lt;/a&gt; specs. aka Semantic Versioning. aka v.&lt;code&gt;~0.0.0&lt;/code&gt; or &lt;code&gt;^a.b.c&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;a&lt;/code&gt; is the major version, breaking backward compatibility. &lt;br&gt;
&lt;code&gt;b&lt;/code&gt; is new features but doesn’t change current features&lt;br&gt;
&lt;code&gt;c&lt;/code&gt; is a bug fix&lt;/p&gt;

&lt;p&gt;So why do you care? If you run into issues on &lt;code&gt;npm install&lt;/code&gt;, likely you have a version issue. &lt;/p&gt;

&lt;p&gt;For now, just know this (the relationship is explained in the next section):&lt;/p&gt;

&lt;p&gt;The characters &lt;code&gt;~&lt;/code&gt;, &lt;code&gt;^&lt;/code&gt;, or lack of, dictate how and when a repo’s direct dependencies update. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if you write ~0.13.0, you want only &lt;em&gt;update&lt;/em&gt; patch releases: 0.13.1 is ok, but 0.14.0 is not.&lt;/li&gt;
&lt;li&gt;if you write ^0.13.0, you want to update &lt;em&gt;patch and minor releases&lt;/em&gt;: 0.13.1, 0.14.0 and so on.&lt;/li&gt;
&lt;li&gt;if you write 0.13.0, that is the &lt;em&gt;exact version&lt;/em&gt; that will be used, always&lt;/li&gt;
&lt;li&gt;Source: nodejs.dev&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Relationship Between &lt;code&gt;npm install&lt;/code&gt; and the &lt;code&gt;package&lt;/code&gt; Files.
&lt;/h3&gt;

&lt;p&gt;When you &lt;code&gt;npm install&lt;/code&gt; a repo without a &lt;code&gt;package-lock.json&lt;/code&gt;, NPM “knows” to install the latest version of the packages within the minor release. &lt;/p&gt;

&lt;p&gt;That is, if a semantic version (aka semver) is ^0.13.0 for package X, NPM won’t install version 1.0.0 (assuming a developer follows semver specs), but it might install 0.15.0 as the latest version. And while 0.15.0 should be compatible with 0.13.0 features, it might introduce a bug.&lt;/p&gt;

&lt;p&gt;This is where the &lt;code&gt;package-lock.json&lt;/code&gt; comes in handy.  &lt;/p&gt;

&lt;p&gt;When you &lt;code&gt;npm install&lt;/code&gt; a repo with a &lt;code&gt;package-lock.json&lt;/code&gt;, npm “knows” to install all the packages and versions dictated in the lock file. Since the lock file is committed to source control, everyone will have the same packages and package dependencies. #magic &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tip:&lt;/em&gt; If you are doing a tutorial from scratch and run into issues with packages, make sure you can at least use the same &lt;code&gt;package.json&lt;/code&gt; and &lt;code&gt;package-lock.json&lt;/code&gt; files from their repo. &lt;/p&gt;

&lt;h3&gt;
  
  
  Interesting Facts to Know about &lt;code&gt;package-lock.json&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Automatically generated when NPM changes node_modules tree or the package.json file is changed.&lt;/li&gt;
&lt;li&gt;It should be committed into your source repo. &lt;/li&gt;
&lt;li&gt;It is ignored if found anywhere else other than in top-level folder structure. &lt;/li&gt;
&lt;li&gt;Didn’t exist before version NPM v5.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;package.json&lt;/code&gt; dictates what is in &lt;code&gt;package-lock.json&lt;/code&gt; as of  &lt;a href="https://github.com/npm/npm/pull/17508"&gt;PR17508&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Resources &amp;amp;&amp;amp; References
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.npmjs.com/cli/v6/configuring-npm/package-lock-json"&gt;NPM Official Doc on Package-lock.json&lt;/a&gt;&lt;br&gt;
&lt;a href="https://nodejs.dev/learn/the-package-lock-json-file"&gt;Node.js Explanation&lt;/a&gt;&lt;br&gt;
&lt;a href="https://semver.org/"&gt;What is SemVer?&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.carlrippon.com/upgrading-npm-dependencies"&gt;How to Upgrade Major Version in NPM&lt;/a&gt;&lt;br&gt;
&lt;a href="https://nullpointertonowhere.com/2018/01/09/why-programmers-should-buy-mechanical-keyboards/"&gt;Why You Should Code on a Mechanical Keyboard&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Feedback? Suggestions? Additions?
&lt;/h3&gt;

&lt;p&gt;Did I miss something? Should I add something other devs should know? Drop a comment and I'll update the article with the appropriate information (and citation). &lt;/p&gt;

</description>
      <category>npm</category>
      <category>javascript</category>
    </item>
    <item>
      <title>SCSS @content Use Cases &amp; Examples</title>
      <dc:creator>Brad Beggs</dc:creator>
      <pubDate>Fri, 05 Feb 2021 21:07:12 +0000</pubDate>
      <link>https://dev.to/brad_beggs/scss-content-use-cases-examples-261l</link>
      <guid>https://dev.to/brad_beggs/scss-content-use-cases-examples-261l</guid>
      <description>&lt;p&gt;The @content, aka content directive, is “simple” in that it provides a way to reduce repetitive code, allowing for reuse and easier changes throughout the codebase.&lt;/p&gt;

&lt;p&gt;But knowing when to use &lt;code&gt;@content&lt;/code&gt; in advance is a touch harder. Here are at least 5 common use cases and examples from around the web.&lt;/p&gt;

&lt;h3&gt;
  
  
  Uses Cases for The Content Directive, aka  &lt;code&gt;@content&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Use &lt;code&gt;@content&lt;/code&gt;for :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;@media&lt;/code&gt; queries, &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;keyframes&lt;/code&gt; animation, &lt;/li&gt;
&lt;li&gt;buttons, &lt;/li&gt;
&lt;li&gt;nested selectors,&lt;/li&gt;
&lt;li&gt;notifications&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you have other times you use &lt;code&gt;@content&lt;/code&gt;, drop a comment so others can see other uses cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who Is This For?
&lt;/h3&gt;

&lt;p&gt;Newish to using SCSS and would like multiple examples/context for how to use the &lt;code&gt;@content&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. @media Queries
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="c1"&gt;// from riptutorial&lt;/span&gt;

&lt;span class="c1"&gt;// located in _mixin.scss partial file&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt; &lt;span class="nf"&gt;small-screen&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="n"&gt;screen&lt;/span&gt; &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;800px&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="k"&gt;@content&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="c1"&gt;// located in /modules/_media.scss partial file&lt;/span&gt;
&lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;small-screen&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;600px&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="c1"&gt;// above mixin and @media become:&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="n"&gt;screen&lt;/span&gt; &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;800px&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="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;600px&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;
  
  
  2. Keyframes/Animations
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="c1"&gt;// from thoughthot&lt;/span&gt;

&lt;span class="c1"&gt;// located in _mixin.scss partial file&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt; &lt;span class="nf"&gt;keyframes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@-webkit-keyframes&lt;/span&gt; &lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;@-moz-keyframes&lt;/span&gt; &lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;@keyframes&lt;/span&gt; &lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@content&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="c1"&gt;// located in modules/_keyframes.scss&lt;/span&gt;
&lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;keyframes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fadeIn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;to&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&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="c1"&gt;// The above mixin and @contents compiles into styles.css:&lt;/span&gt;
&lt;span class="k"&gt;@-webkit-keyframes&lt;/span&gt; &lt;span class="nt"&gt;fadeIn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;to&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&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="k"&gt;@-moz-keyframes&lt;/span&gt; &lt;span class="nt"&gt;fadeIn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;to&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&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="k"&gt;@keyframes&lt;/span&gt; &lt;span class="nt"&gt;fadeIn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;to&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&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;
  
  
  3. Buttons
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="c1"&gt;// from Krasimir.dev&lt;/span&gt;

&lt;span class="c1"&gt;// located in _mixin.scss partial file&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt; &lt;span class="nf"&gt;button&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// located in _interfaces.scss partial file&lt;/span&gt;
&lt;span class="nc"&gt;.alert&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#F00&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="nc"&gt;.cancel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="mh"&gt;#999&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="c1"&gt;// The above mixin and @contents compiles into styles.css:&lt;/span&gt;
&lt;span class="nc"&gt;.alert&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#F00&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.cancel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="mh"&gt;#999&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;
  
  
  4. Nested Selectors
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="c1"&gt;// from Stackoverflow/piouPiouM&lt;/span&gt;

&lt;span class="c1"&gt;// located in _mixin.scss partial file&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt; &lt;span class="nf"&gt;context--alternate-template&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;@content&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// located in _base.scss partial file&lt;/span&gt;
&lt;span class="nc"&gt;.content-sample&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;context--alternate-template&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;.important-thing&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nc"&gt;.is-italic&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'my-webfont-italic'&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="c1"&gt;// outside mixin call&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// The above mixin and @contents compiles into styles.css:&lt;/span&gt;
&lt;span class="nc"&gt;.content-sample&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.content-sample&lt;/span&gt; &lt;span class="nc"&gt;.important-thing&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.content-sample.is-italic&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'my-webfont-italic'&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;
  
  
  5. Notifications
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="c1"&gt;// from devcamp.com&lt;/span&gt;

&lt;span class="c1"&gt;// located in _mixin.scss partial file&lt;/span&gt;
&lt;span class="k"&gt;@mixin&lt;/span&gt; &lt;span class="nf"&gt;notification&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;99%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;35px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="mi"&gt;.2em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Verdana&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// located in _notifications.scss partial file&lt;/span&gt;
&lt;span class="nc"&gt;.error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;notification&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DarkRed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;LightSlateGray&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="nc"&gt;.success&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;notification&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MediumSeaGreen&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MintCream&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;LightSalmon&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;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://sass-lang.com/documentation/at-rules/mixin#content-blocks"&gt;Official SASS @content Docs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://thoughtbot.com/blog/sasss-content-directive"&gt;Sass’s @Content Directive - thoughtbot&lt;/a&gt;&lt;br&gt;
&lt;a href="https://krasimirtsonev.com/blog/article/SASS-content-directive-is-a-wonderful-thing"&gt;SASS Content Directive Is A Wonderful Thing&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/37205463/sasss-content-directive-use-cases"&gt;Stackover Flow&lt;/a&gt;&lt;br&gt;
&lt;a href="https://devcamp.com/trails/styling-scss/campsites/advanced-scss/guides/how-use-content-directive-in-scss-allow-mixin-flexibility"&gt;Devcamp.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>design</category>
    </item>
    <item>
      <title>Easy Way to console.log() w/o console.log()
</title>
      <dc:creator>Brad Beggs</dc:creator>
      <pubDate>Fri, 29 Jan 2021 01:25:19 +0000</pubDate>
      <link>https://dev.to/brad_beggs/easy-way-to-console-log-w-o-console-log-4f95</link>
      <guid>https://dev.to/brad_beggs/easy-way-to-console-log-w-o-console-log-4f95</guid>
      <description>&lt;p&gt;Whether you’re hunting for a bug or writing code, you likely use Javascript’s ‘console.log()’. It works but &lt;code&gt;console&lt;/code&gt; has 19 other methods to assist your development and debugging. &lt;/p&gt;

&lt;p&gt;Most notably is &lt;code&gt;console.table()&lt;/code&gt; when working with objects and arrays, which provides a prettier format for these data types. &lt;/p&gt;

&lt;h2&gt;
  
  
  console.table() - for arrays, objects, and mixed data types
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Output an Array and Array of Arrays
&lt;/h3&gt;

&lt;p&gt;‘console.table’ provides the index on the left and indexed values or just ‘value’ across the top for array or array of arrays. &lt;/p&gt;

&lt;p&gt;A 1d array with &lt;code&gt;.table() vs .log()&lt;/code&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;namesStartingWithA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alec&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alexis&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Anastasia&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andre&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrea&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&lt;/span&gt;&lt;span class="dl"&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;namesStartingWithA&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;Index&lt;/span&gt;    &lt;span class="nx"&gt;Value&lt;/span&gt; 
&lt;span class="mi"&gt;0&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alec&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alexis&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Anastasia&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andre&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrea&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="mi"&gt;6&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="o"&gt;&amp;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="nx"&gt;namesStartingWithA&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// same data as above looks like this&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alec&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alexis&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Anastasia&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andre&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrea&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&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;A 2d array with &lt;code&gt;.table() vs .log()&lt;/code&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;namesStartingWithA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alec&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alexis&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Anastasia&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andre&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrea&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&lt;/span&gt;&lt;span class="dl"&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;namesStartingWithA&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;Index&lt;/span&gt;    &lt;span class="mi"&gt;0&lt;/span&gt;           &lt;span class="mi"&gt;1&lt;/span&gt;          &lt;span class="mi"&gt;2&lt;/span&gt;        &lt;span class="nx"&gt;Value&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alec&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;       &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alexis&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;       
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Anastasia&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andre&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrea&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;    
&lt;span class="mi"&gt;2&lt;/span&gt;                                       &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;                                       &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="o"&gt;&amp;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="nx"&gt;namesStartingWithA&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="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&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;h3&gt;
  
  
  Output of Objects and Arrays of Objects
&lt;/h3&gt;

&lt;p&gt;When outputting an array of objects,  the keys become headers. If the data has many values or many keys, avoid using ‘console.table()’.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;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;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;namesStartingWithAWithId&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;Index&lt;/span&gt;   &lt;span class="nx"&gt;Name&lt;/span&gt;            &lt;span class="nx"&gt;ID&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alec&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;      &lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alexis&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;    &lt;span class="mi"&gt;69&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Anastasia&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="mi"&gt;815&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andre&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="mi"&gt;68&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrea&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;    &lt;span class="mi"&gt;062&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;    &lt;span class="mi"&gt;97&lt;/span&gt;
&lt;span class="mi"&gt;6&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Andrew&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;    &lt;span class="mi"&gt;772&lt;/span&gt;

&lt;span class="o"&gt;&amp;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="nx"&gt;namesStartingWithAWithId&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="mi"&gt;86&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Show Selected Columns Only
&lt;/h3&gt;

&lt;p&gt;It is possible to select just the column(s) you want to see.&lt;/p&gt;

&lt;p&gt;For example: ‘console.table(data, [‘columnName’])’  You do need the brackets and single quote. &lt;code&gt;[‘ ‘]&lt;/code&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="o"&gt;&amp;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;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;namesStartingWithAWithId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="err"&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="nx"&gt;Index&lt;/span&gt;      &lt;span class="nx"&gt;ID&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt;     &lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;     &lt;span class="mi"&gt;69&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;     &lt;span class="mi"&gt;815&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;     &lt;span class="mi"&gt;68&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;     &lt;span class="mi"&gt;062&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;     &lt;span class="mi"&gt;97&lt;/span&gt;
&lt;span class="mi"&gt;6&lt;/span&gt;     &lt;span class="mi"&gt;772&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Not Recommended On Complex or Long Data
&lt;/h3&gt;

&lt;p&gt;Because ‘console.table()’ is highly visual, long arrays or complex objects are likely harder to understand in this table format unless you specify the column(s). &lt;/p&gt;

&lt;h3&gt;
  
  
  Other Useful console.table Tidbits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In Firefox, &lt;code&gt;console.table()&lt;/code&gt; displays only 1000 rows. &lt;/li&gt;
&lt;li&gt;Click a header column name and the browser sorts the table based on the column data (ASC and DSC).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reference
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Console/table"&gt;MDN console.table&lt;/a&gt; &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>Typescript: Array Types &amp; Usage </title>
      <dc:creator>Brad Beggs</dc:creator>
      <pubDate>Sat, 23 Jan 2021 03:10:48 +0000</pubDate>
      <link>https://dev.to/brad_beggs/typescript-array-types-usage-1l0n</link>
      <guid>https://dev.to/brad_beggs/typescript-array-types-usage-1l0n</guid>
      <description>&lt;h2&gt;
  
  
  Assumptions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You know what Typescript is for.&lt;/li&gt;
&lt;li&gt;You have it installed.&lt;/li&gt;
&lt;li&gt;You can format basic data types (number, string, boolean)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;JS arrays are useful containers, holding whatever is asked. But over time one might add the wrong data type into it and get away with it until the bug presents.&lt;/p&gt;

&lt;p&gt;Typescript arrays on the other hand are a bit rigid. But this initial rigidity is helpful over time, particularly on a team. The TS array declaration speaks of its intent, unlike the JS version.    &lt;/p&gt;

&lt;h2&gt;
  
  
  Basic Array Type Usage
&lt;/h2&gt;

&lt;p&gt;The basic declaration of an array data type is straight forward:&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;let&lt;/span&gt; &lt;span class="nx"&gt;arrayName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;number&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="p"&gt;]&lt;/span&gt;   &lt;span class="c1"&gt;// initialize arrayName with blank array, holding only floating point numbers &lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;animals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&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="err"&gt;‘&lt;/span&gt;&lt;span class="nx"&gt;dog&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="nx"&gt;cat&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="nx"&gt;mouse&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;// initialize animals with a string of names and only strings&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you try to put a string into the array 'arrayName', TypeScript will kindly tell you can't. &lt;/p&gt;

&lt;p&gt;But what if you need an array with multiple types?&lt;/p&gt;

&lt;h2&gt;
  
  
  Multiple Data Types in Array &amp;amp; Nested Array
&lt;/h2&gt;

&lt;p&gt;But if your array requires multiple data types, you can specify which types it should accept using ‘|’ :&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;let&lt;/span&gt; &lt;span class="nx"&gt;greetingCountDown&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;number&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="nx"&gt;hello&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;number&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="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="nx"&gt;appt&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1032&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// a 1 dimension array, allowing uses of dates, strings and numbers&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;dateTwo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;number&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="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="mi"&gt;1032&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;brad&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dog&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vote&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;  &lt;span class="c1"&gt;// a 2 dimensional array with nested array of strings. 'string[]' indicates a subarray in this usecase&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Note: the ‘|’ is called the ‘union’ operator in TS.&lt;/em&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Handling Unknown Array Data Types
&lt;/h2&gt;

&lt;p&gt;If you’re fetching from an API or using a library, you might not know or have control of the data. &lt;/p&gt;

&lt;p&gt;To show the intention of allowing any data type, declare  your type as ‘any’:&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;let&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="c1"&gt;// initialize result to allow any and all datatypes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why not just declare ‘let result = []’ and drop the use of ‘: any’?  Declaring type communicates intent to other developers and your IDE. &lt;/p&gt;

&lt;h2&gt;
  
  
  Array of Objects in TypeScript
&lt;/h2&gt;

&lt;p&gt;There are two ways to declare an array of objects: inline and via ‘interface’. &lt;/p&gt;

&lt;p&gt;The inline method is simple but cumbersome and the object isn’t readily reusable elsewhere. &lt;/p&gt;

&lt;p&gt;The inline format looks like this:&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;let&lt;/span&gt; &lt;span class="nx"&gt;arrayName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;objectDeclarationHere&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="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;  &lt;span class="c1"&gt;// initialize blank array of objects  &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inline example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// declare an inline array of objects&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;peopleShirtArray&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;shirtSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;small&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;medium&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;large&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="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&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="s2"&gt;Brad&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;small&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="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="s2"&gt;Kamala&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;medium&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="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="s2"&gt;Amanda&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;large&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="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;Cacilda&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="nx"&gt;medium&lt;/span&gt;&lt;span class="err"&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;The interface method once set up, is mostly straightforward. There are details worth reading up on if you need to reuse your object.&lt;/p&gt;

&lt;p&gt;The interface format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// declare the interface&lt;/span&gt;
&lt;span class="c1"&gt;// export the interface; the interface is often placed in a separate file for reuse  &lt;/span&gt;
&lt;span class="c1"&gt;// export is optional though&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;peopleShirts&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;small&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="nx"&gt;medium&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;   &lt;span class="nx"&gt;large&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="c1"&gt;// declare your import &lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;peopleShirts&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;../api/responses&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// declare the array of objects with the interface &lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;peopleShirtArray&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;peopleShirts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&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="s2"&gt;Brad&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;small&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="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="s2"&gt;Kamala&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;medium&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="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="s2"&gt;Amanda&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;large&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="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="nx"&gt;Cacilda&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="nx"&gt;medium&lt;/span&gt;&lt;span class="err"&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;The interface article listed in the Resources is excellent, with useful code examples and analogies for understanding.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.altexsoft.com/blog/typescript-pros-and-cons/"&gt;What is Typescript &amp;amp; Why Use It&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.typescriptlang.org/download"&gt;How to install Typescript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.logrocket.com/interfaces-in-typescript-what-are-they-and-how-do-we-use-them-befbc69b38b3/"&gt;Interfaces in TypeScript: What they are &amp;amp; how to use them&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Feedback?
&lt;/h2&gt;

&lt;p&gt;Have thoughts or advice for others on array data types and interfaces in TypeScript?&lt;/p&gt;

&lt;p&gt;If so, drop a note. I'd love to hear and see your examples, explanations, and other details to clarify how/why/when.&lt;/p&gt;

</description>
      <category>typescript</category>
    </item>
    <item>
      <title>Quickly Move Code in VS Code w/ Mac Shortcuts
</title>
      <dc:creator>Brad Beggs</dc:creator>
      <pubDate>Fri, 15 Jan 2021 01:13:47 +0000</pubDate>
      <link>https://dev.to/brad_beggs/quickly-move-code-in-vs-code-w-mac-shortcuts-kd0</link>
      <guid>https://dev.to/brad_beggs/quickly-move-code-in-vs-code-w-mac-shortcuts-kd0</guid>
      <description>&lt;h3&gt;
  
  
  CMD X - place the full line into memory &amp;amp; clear it simultaneously
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;What It Does:&lt;/em&gt; This is similar to the classic CMD X cut of text but without the need to select the text. This shortcut automatically moves text into memory and deletes the line. Use CMD V to paste the same line (if needed)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Best For:&lt;/em&gt; removing 1 line and moving it to a new position. At the new position, CMD V and the text will bump down the current line text and insert at the location.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jBkOGRpw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://j.gifs.com/D1X2VY.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jBkOGRpw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://j.gifs.com/D1X2VY.gif"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  CMD Enter - insert a new line from the middle of the line above
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;What It Does:&lt;/em&gt; On your cursor position, CMD Enter inserts a new line break, shifting the current line 1 lower and moving your cursor to the start of the empty line. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Best For:&lt;/em&gt; Spacing out code blocks or need a new line for new text&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FYdlRBsA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://j.gifs.com/wVoA6m.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FYdlRBsA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://j.gifs.com/wVoA6m.gif"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  CMD D -  select identical items and replace
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;What It Does:&lt;/em&gt; Finds identical text and selects it for simultaneous delete, or re-write&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Best For:&lt;/em&gt; Renaming a variable/text which is used in multiple locations in one file.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; Move your cursor to the word/phrase and CMD D to select all adjoining characters. No need to highlight the whole word or number. CMD D multiple times to select each instance below the cursor.  ESC to remove focus.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6_KSw_zC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://j.gifs.com/P7n9qy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6_KSw_zC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://j.gifs.com/P7n9qy.gif"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Option Up or Down Arrows - move line(s)
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;What It Does:&lt;/em&gt; Easily move a full line of code (or lines of code) up or down as many lines as needed.  Similar to cut and paste or CMD X but visually see code move&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Best For:&lt;/em&gt; Refactoring code. Moving one function above or below another. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; From anywhere on a single line, Option up or down to move the line. To move multiple lines, highlight at least 1 part of each line to move them as a block. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pE0ds50r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://j.gifs.com/ANR2L7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pE0ds50r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://j.gifs.com/ANR2L7.gif"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  OPTION CMD [  or OPTION CMD ]  - collapse/uncollapse code blocks
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;What It Does&lt;/em&gt; Quickly collapse or uncollapse blocks of code according to scope&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Best For:&lt;/em&gt; condensing code that you don’t need to see or deal with at the moment. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note:&lt;/em&gt; This command works per scope. So you can collapse while loops, if statements, etc, and not the complete function. To collapse the function, invoke the shortcut in the functional scope.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TOf5-KDV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://j.gifs.com/wVoAzg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TOf5-KDV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://j.gifs.com/wVoAzg.gif"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>writing</category>
    </item>
    <item>
      <title>For...of &amp; For...in - How to Remember the Difference with ammo. 
</title>
      <dc:creator>Brad Beggs</dc:creator>
      <pubDate>Fri, 08 Jan 2021 00:52:19 +0000</pubDate>
      <link>https://dev.to/brad_beggs/for-of-for-in-how-to-remember-the-difference-with-ammo-32fg</link>
      <guid>https://dev.to/brad_beggs/for-of-for-in-how-to-remember-the-difference-with-ammo-32fg</guid>
      <description>&lt;p&gt;Ah, syntax. Your logic might be sound but miss those commas, brackets, or a typo turns &lt;code&gt;&amp;gt;&lt;/code&gt; into '&amp;lt;', and bam! broken code. But, hopefully, your JSlinter catches and corrects those some of those errors.&lt;/p&gt;

&lt;p&gt;While your &lt;a href="https://eslint.org/docs/rules/guard-for-in"&gt;linter will catch incorrect use of for...in&lt;/a&gt;, how does one remember the use case for &lt;code&gt;for...of&lt;/code&gt; or &lt;code&gt;for...in&lt;/code&gt;? Which is for iterating over &lt;code&gt;objects&lt;/code&gt; or through &lt;code&gt;arrays/strings&lt;/code&gt;? &lt;/p&gt;

&lt;h3&gt;
  
  
  Remember the difference of &lt;code&gt;for...in&lt;/code&gt; &amp;amp; &lt;code&gt;for...of&lt;/code&gt;.
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;If you get shot and the bullet stays in your body, the doctor looks for the &lt;code&gt;foreign object&lt;/code&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If a {bullet: "Full Metal Jacket"} is in a javascript ammo{} object, a developer looks &lt;code&gt;for...in&lt;/code&gt; object. The pun/trick is pronouncing &lt;code&gt;for...in&lt;/code&gt; as “foreign.”  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do brush up on &lt;code&gt;for..in&lt;/code&gt; usage as it doesn’t loop in an ordered fashion. This &lt;a href="https://bitsofco.de/for-in-vs-for-of/"&gt;Bits of Code article&lt;/a&gt; explains well when to use &lt;code&gt;for...in&lt;/code&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Other Memory Devices?
&lt;/h3&gt;

&lt;p&gt;What tricks or methods do you use to remember syntax or bits of code?  &lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://eslint.org/docs/rules/guard-for-in"&gt;ESLint Documentation on For..of&lt;/a&gt;&lt;br&gt;
&lt;a href="https://bitsofco.de/for-in-vs-for-of/"&gt;Bits of Code - for..in versus for..of Loops&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>VS Code - Vertical Rulers for Prettier Code?</title>
      <dc:creator>Brad Beggs</dc:creator>
      <pubDate>Thu, 31 Dec 2020 07:37:27 +0000</pubDate>
      <link>https://dev.to/brad_beggs/vs-code-vertical-rulers-for-prettier-code-3gp3</link>
      <guid>https://dev.to/brad_beggs/vs-code-vertical-rulers-for-prettier-code-3gp3</guid>
      <description>&lt;h2&gt;
  
  
  What is a Vertical Ruler in VS Code?
&lt;/h2&gt;

&lt;p&gt;In VS Code, the vertical ruler is a static, customizable design element to give your code an unenforced right-side boundary, meaning it won’t word-wrap your code &lt;/p&gt;

&lt;p&gt;This vertical ruler isn’t for measurements, unlike in Word, Illustrator, or other design/editing packages. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Famas6zvy56v8gqsd9ujo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Famas6zvy56v8gqsd9ujo.png" alt="Orange, gray, purple rulers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Orange, gray, and purple rulers. Note lines 21, 22 are not impacted by the rulers.&lt;/p&gt;

&lt;p&gt;Text is not impacted by rulers, as the example above shows.&lt;/p&gt;

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

&lt;p&gt;A vertical ruler provides an easy means to make your code readable by not being too wide.   &lt;/p&gt;

&lt;p&gt;Some languages (like Python or Drupal) have style guides for max characters per line. (79 characters for Python). &lt;/p&gt;

&lt;p&gt;While others, like Javascript, have a &lt;a href="https://developer.mozilla.org/en-US/docs/MDN/Guidelines/Code_guidelines/JavaScript" rel="noopener noreferrer"&gt;very loose set of guidelines&lt;/a&gt; but nothing suggesting a max character count per line.&lt;/p&gt;

&lt;h2&gt;
  
  
  How
&lt;/h2&gt;

&lt;p&gt;Color and multiple vertical rulers are available in VS Code as of the &lt;a href="https://github.com/microsoft/vscode/issues/54312" rel="noopener noreferrer"&gt;February 2020 edition&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1 - Open &lt;code&gt;settings.json&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mac: Press &lt;code&gt;Shift&lt;/code&gt; &lt;code&gt;Command&lt;/code&gt;  &lt;code&gt;P&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;non-macOS: press &lt;code&gt;Ctrl P&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This opens the file search.&lt;/p&gt;

&lt;p&gt;Type in &lt;code&gt;settings.json&lt;/code&gt; and select the file to edit it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 - Add the following to the last line inside the json object:
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nl"&gt;"editor.rulers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"column"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;spacing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="err"&gt;st&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;column&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;left&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#ff9900"&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;orange&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Go&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Vols!&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="err"&gt;nd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ruler&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;color&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;option&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"column"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;third&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ruler&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#9f0af5"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;purple&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;go&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Pirates!&lt;/span&gt;&lt;span class="w"&gt; 
   &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The above implementation is language-agnostic and becomes the default "always-on" ruler(s). It is possible to have both the default and language-specific at the same time. &lt;/p&gt;

&lt;p&gt;For a specific language, change the language name in the ‘[  ]’ brackets to your preferred language:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nl"&gt;"[ruby]"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"editor.rulers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"column"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#00ff22"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Add one for each language.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3 - Enjoy readable code
&lt;/h3&gt;

&lt;p&gt;Make sure to save your changes and enjoy. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fz220nvsrbhu64vydbfzu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fz220nvsrbhu64vydbfzu.png" alt="Pretty Code. Not too wide. Just right."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pretty Code. Not too wide. Just right.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback?
&lt;/h2&gt;

&lt;p&gt;Have thoughts or advice on the above implementation or other useful VS Code settings?&lt;/p&gt;

&lt;p&gt;If so, drop a note. I'd love to hear and see your examples, explanations, and other details to clarify how/why/when.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/microsoft/vscode/issues/54312" rel="noopener noreferrer"&gt;February 2020 VS Code Feature&lt;/a&gt;. &lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/MDN/Guidelines/Code_guidelines/JavaScript" rel="noopener noreferrer"&gt;MDN Javascript Guidelines&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.python.org/dev/peps/pep-0008/" rel="noopener noreferrer"&gt;Python Style Guide - PEP8&lt;/a&gt; &lt;/p&gt;

</description>
      <category>vscode</category>
      <category>python</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
