<?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: Xiaomin Zhu</title>
    <description>The latest articles on DEV Community by Xiaomin Zhu (@xiaominzhu88).</description>
    <link>https://dev.to/xiaominzhu88</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%2F430670%2F9b1ba50a-123a-4e13-8931-4fdccbad5f77.jpeg</url>
      <title>DEV Community: Xiaomin Zhu</title>
      <link>https://dev.to/xiaominzhu88</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/xiaominzhu88"/>
    <language>en</language>
    <item>
      <title>Learning By Doing— Use Gatsby to Create your First Site</title>
      <dc:creator>Xiaomin Zhu</dc:creator>
      <pubDate>Tue, 20 Jul 2021 11:59:36 +0000</pubDate>
      <link>https://dev.to/xiaominzhu88/learning-by-doing-use-gatsby-to-create-your-first-site-4ple</link>
      <guid>https://dev.to/xiaominzhu88/learning-by-doing-use-gatsby-to-create-your-first-site-4ple</guid>
      <description>&lt;p&gt;Last week, our company launched a new project, it is set up with Gatsby — React (frontend), Laravel (backend), SQL (database).&lt;/p&gt;

&lt;p&gt;In the beginning, I thought I would have a headache because, with my 1-year coding experience, I had only heard about GatsbyJS but never really worked with it deeply. But after reading the official docs patiently, I found that it was not as complicated as I imagined.&lt;/p&gt;

&lt;p&gt;I want to share the basic steps in this article because everything must start with building a solid foundation.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;From a technical point of view, GatsbyJS is a hybrid system of React, react-router, webpack, babel, and GraphQL to achieve a complete separation of the data - and the UI layer to create a fast website without losing the modern front-end development model of SEO.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;1) Install Gatsby CLI via npm globally by running&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;npm install -g gatsby-cli&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;2) Create a Gatsby site from a starter&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;gatsby new hello-world &lt;a href="https://github.com/gatsbyjs/gatsby-starter-hello-world" rel="noopener noreferrer"&gt;https://github.com/gatsbyjs/gatsby-starter-hello-world&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;3) Go to director and Start the development mode&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The command &lt;strong&gt;gatsby develop&lt;/strong&gt; starts a development server.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Open up your browser and navigate to &lt;strong&gt;&lt;a href="http://localhost:8000/" rel="noopener noreferrer"&gt;http://localhost:8000/&lt;/a&gt;&lt;/strong&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4xwspnxkj6ogpkrzwyp.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%2Fuploads%2Farticles%2Fu4xwspnxkj6ogpkrzwyp.png" alt="1_P2FU5DDn7OusBmQT9C67zQ"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🙌🏻 Yup!🙃&lt;/p&gt;

&lt;p&gt;In your code editor, take a look at the different directories and files contained in the ‘HELLO-WORLD’ directory (sorry about my screenshot with the half-hidden text). It should look something like this:&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtdxbwqdtiv3enrw6457.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%2Fuploads%2Farticles%2Fhtdxbwqdtiv3enrw6457.png" alt="1_dgjulvV2KfhhVqHNZoLBXA"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;VS code screenshot&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now go to &lt;strong&gt;pages/index.js&lt;/strong&gt; and change &lt;strong&gt;“Hello world!”&lt;/strong&gt; to “Hello you!”, save the file and you should see that changes are reflected almost instantly in the browser.&lt;/p&gt;

&lt;p&gt;Gatsby uses &lt;strong&gt;hot reloading&lt;/strong&gt; to speed up your development process. Essentially, when you’re running a Gatsby development server, the Gatsby site files are being “watched” in the background — any time you save a file, your changes will be immediately reflected in the browser.&lt;br&gt;
Let’s add an image, this page is too boring 🌨&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk78is7mn4xn07lmp5jly.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%2Fuploads%2Farticles%2Fk78is7mn4xn07lmp5jly.png" alt="1_JZzmp69ZL366Z0-EaqYv8A"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In this case, a random image from Unsplash&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Save the file: &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0fjpvk0tn1cx8ylko15v.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%2Fuploads%2Farticles%2F0fjpvk0tn1cx8ylko15v.png" alt="1_7Pe8EtiClTW3igWRVQhrXg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is what you should see ⭐️&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yeah! A small success! 🌸&lt;/p&gt;

&lt;p&gt;Now, let’s using &lt;strong&gt;Page components&lt;/strong&gt;（🌈 The premise is that you are familiar with the basic structure of &lt;strong&gt;React&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Any React component defined in &lt;strong&gt;src/pages/*.js&lt;/strong&gt; will automatically become a page, in our case &lt;strong&gt;pages/index.js&lt;/strong&gt; is the &lt;strong&gt;default page.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;4) Create a new file “secondPage.js” at src/pages and write some simple code like below, save it.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpfezebqn0uqnxe18cy0.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%2Fuploads%2Farticles%2Fcpfezebqn0uqnxe18cy0.png" alt="1_SU-0zEMP1JGXoaJ5A-k6lQ"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is our second page&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let’s say the default page and the second page both got quite large and you were rewriting a lot of things. You can use &lt;strong&gt;sub-components&lt;/strong&gt; to break the UI into reusable pieces. Both of your pages may contain a &lt;strong&gt;header&lt;/strong&gt; — create a component that will describe a &lt;strong&gt;Header.&lt;/strong&gt; 👇&lt;/p&gt;

&lt;p&gt;5) Create a “components” folder at /src, then a “Header” folder within it, which contains a “Header.js” file&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(I am used to creating files with the same name in each folder, so that it’s simple and clear, for example, Header.js and Header.module.scss inside the Header folder…)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;6) Give the Header some text&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flflrrcb9lufej1hsw5rf.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%2Fuploads%2Farticles%2Flflrrcb9lufej1hsw5rf.png" alt="1_B3PoJYGn6bVppfDWFdlpTg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A very simple Header Component&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;7) Import this Header from page (/secondPage.js) like below&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh1pfhdq83b6nsk1ec9mh.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%2Fuploads%2Farticles%2Fh1pfhdq83b6nsk1ec9mh.png" alt="1_J1rl9XoFcPhMJm7jdIpqBQ"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Import Header Component from page&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now our second page is updated! 💫&lt;br&gt;
Please ignore the inline style here, I generally do not recommend using it. Instead, using &lt;strong&gt;scss module&lt;/strong&gt; for each file would be much better, but in this case, just keep it simple with inline style. ⭐️ &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2lyynepihs5cac1e6wlu.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%2Fuploads%2Farticles%2F2lyynepihs5cac1e6wlu.png" alt="1_I0W5IMr4COyJX4pmTGu5wA"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Second page contains Header component which we created and imported&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🌹 Yeah! Another tiny success! Now let’s play a bit with &lt;em&gt;props&lt;/em&gt; in a React way.&lt;/p&gt;

&lt;p&gt;8) Give the Header a “title” prop inside pages/secondPage.js like below&lt;br&gt;
Ignore the &lt;strong&gt;Link&lt;/strong&gt; for now. &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnor26p7b2be4neuip0my.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%2Fuploads%2Farticles%2Fnor26p7b2be4neuip0my.png" alt="1_iz05j71DuhsZvWGRGbWI0Q"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Give a title prop to Child Header&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;9) Update Header Component in a React basic way&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcm2jx9bd9blqq71oozj.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%2Fuploads%2Farticles%2Fqcm2jx9bd9blqq71oozj.png" alt="1_zJOmkCjO-__OUv5BnTY1yg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Using title prop from Parent secondPage&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Save and see 🍭&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%2Fuploads%2Farticles%2Fbd2p7xt7oz1t8meb62n0.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%2Fuploads%2Farticles%2Fbd2p7xt7oz1t8meb62n0.png" alt="1_AVGuEaFqPJwdwTqm3gKB6A"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That was easy! Now you could create more pages and sub-components and play around with props! 🔍⏱⏳ … &lt;/p&gt;

&lt;p&gt;Remember we had a &lt;strong&gt;&lt;/strong&gt; component which we ignored before at step 8? That is what we want to discover now, it is used to link between pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👉 Important!&lt;/strong&gt; The Gatsby  component is for linking between pages within your site. For external links to pages not handled by your Gatsby site, use the regular HTML &lt;strong&gt;&lt;a&gt;&lt;/a&gt;&lt;/strong&gt; tag, or you could try it and take a look at the error in the console.&lt;/p&gt;

&lt;p&gt;10) Open the index page component (src/pages/index.js), import the  component from Gatsby, and give it a “to” property with the value of "/secondPage" for the pathname.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9dycbh6h96ut9y2aliwj.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%2Fuploads%2Farticles%2F9dycbh6h96ut9y2aliwj.png" alt="1_7eeQe8zdfXYNYmzabARSAA"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Import Link from Gatsby&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now the &lt;strong&gt;default page&lt;/strong&gt; should look like this ( I gave the &lt;strong&gt;Header&lt;/strong&gt; another &lt;strong&gt;title prop&lt;/strong&gt; which contains &lt;strong&gt;“Default page”&lt;/strong&gt; and pink colour to make it clearer).&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%2Fuploads%2Farticles%2Fvqkh0ne55j6xdry5kthb.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%2Fuploads%2Farticles%2Fvqkh0ne55j6xdry5kthb.png" alt="1_BKVjRRblSXSERt8T-GIxnw"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Click on the link at the bottom, you will be linked to your second page which we created before&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🎢 You can add the Link on your second page which maybe links to the default page, see screenshot at step 8.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frls5cfulat2t6e2vtewp.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%2Fuploads%2Farticles%2Frls5cfulat2t6e2vtewp.png" alt="1_OJrH4zzoFjWO8E1Aj1LQ3w"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Click on the link at bottom, you will be linked to default page&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;💎 That’s it! We created two simple pages that can be linked to each other, there is not much styling, but that is out of scope in this article.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But wait … just bear in mind, a website has four parts: HTML, CSS, JavaScript, and &lt;strong&gt;DATA&lt;/strong&gt; — “everything that lives outside a React component”.&lt;/p&gt;

&lt;p&gt;Often, we want to store data &lt;strong&gt;outside&lt;/strong&gt; components and then bring the data into the component as needed. Data can live in file types like &lt;strong&gt;Markdown&lt;/strong&gt;, &lt;strong&gt;CSV&lt;/strong&gt;, etc. as well as &lt;strong&gt;databases&lt;/strong&gt; and &lt;strong&gt;APIs&lt;/strong&gt; of all sorts.&lt;/p&gt;

&lt;p&gt;📝 There are many options for loading data into React components, one of the most popular and powerful of these is &lt;strong&gt;GraphQL&lt;/strong&gt; which I’m learning currently.&lt;/p&gt;

&lt;p&gt;The following are some of my thoughts in the current in-depth study. Below is just a brief introduction. I will try to introduce their usage in the next article.&lt;br&gt;
There are two commonly used configuration files:&lt;/p&gt;

&lt;p&gt;📍 /gatsby-config.js is basically used to configure two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;siteMetadata puts some global information, which can be obtained through GraphQL on every page, like a constent title …&lt;/li&gt;
&lt;li&gt;plugins configuration plugins, this can be obtained according to the plugin documentation when used&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📍 /gatsby-node.js can call Gatsby node APIs to do some automation.&lt;/p&gt;

&lt;p&gt;There are generally two common scenarios:&lt;/p&gt;

&lt;p&gt;📍 Add additional configuration, such as generating a custom path for Markdown articles.&lt;/p&gt;

&lt;p&gt;📍 Generate page files other than /src/pages, such as generating page files for each Markdown article.&lt;/p&gt;

&lt;p&gt;The purpose of sharing those steps was to make my thoughts clearer and understand the basic usage of Gatsby, and I am still continuing to learn.&lt;/p&gt;

&lt;p&gt;Thank you very much for taking the time to read this article！&lt;/p&gt;

&lt;p&gt;If there is something that needs to be corrected, please contact me, I will be very glad to improve them!&lt;/p&gt;

</description>
      <category>gatsby</category>
      <category>react</category>
      <category>beginners</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Prevent line breaks with CSS</title>
      <dc:creator>Xiaomin Zhu</dc:creator>
      <pubDate>Fri, 09 Jul 2021 12:29:18 +0000</pubDate>
      <link>https://dev.to/xiaominzhu88/prevent-line-breaks-with-css-4j9j</link>
      <guid>https://dev.to/xiaominzhu88/prevent-line-breaks-with-css-4j9j</guid>
      <description>&lt;h2&gt;
  
  
  A CSS trick in a React component🧚
&lt;/h2&gt;

&lt;p&gt;Recently I encountered an interesting problem, let’s say, there are some &lt;strong&gt;list items&lt;/strong&gt; to display using the basic React code like below 👇&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%2Fuploads%2Farticles%2F1dj4zxkppz5p6gswbwzm.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%2Fuploads%2Farticles%2F1dj4zxkppz5p6gswbwzm.png" alt="1_rnbP3ABwGNdc6V9creIC7w"&gt;&lt;/a&gt;a very simple &lt;code&gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; …&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;✨ Notice those items should be side by side (&lt;strong&gt;inline&lt;/strong&gt; and of course without any &lt;strong&gt;line breaks&lt;/strong&gt;) like the result below👇&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%2Fuploads%2Farticles%2Fif7utwxatoede2ty1lr9.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%2Fuploads%2Farticles%2Fif7utwxatoede2ty1lr9.png" alt="1_TQSt2hG-9LPjCqEizo_TSQ"&gt;&lt;/a&gt;&lt;br&gt;
responsive lists view&lt;/p&gt;

&lt;p&gt;I wrote some simple css: &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh8mecyo5dox91x986cum.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%2Fuploads%2Farticles%2Fh8mecyo5dox91x986cum.png" alt="1_CoYp9iE8Zn5Hf9sokdkhmw"&gt;&lt;/a&gt;&lt;br&gt;
I want that the items are side by side &lt;strong&gt;👉display: inline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And the Result was 💥&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F063xt53o4jc5066z184v.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%2Fuploads%2Farticles%2F063xt53o4jc5066z184v.png" alt="1_pOUDtDCy5C_p5C_ppu28UA"&gt;&lt;/a&gt;&lt;br&gt;
Ops, line breaks 🙅‍♀️&lt;/p&gt;

&lt;p&gt;See the &lt;strong&gt;line breaks&lt;/strong&gt;? Ugly enough…&lt;br&gt;
🤞 Here comes my simple solution:&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sfoj99eazpwesbg6lde.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%2Fuploads%2Farticles%2F8sfoj99eazpwesbg6lde.png" alt="1_D_1uwqGEGyv7u93T9t3fFw"&gt;&lt;/a&gt;&lt;br&gt;
prevent line breaks&lt;/p&gt;

&lt;p&gt;That’s it! 🌸&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;white-space&lt;/strong&gt; CSS property sets how white space inside an element is handled, it collapses white space, but it does not allow wrapping.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;overflow&lt;/strong&gt; CSS shorthand property sets the desired behavior for an element's overflow — i.e. when an element's content is too big to fit in its block formatting context — in both directions.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;text-overflow&lt;/strong&gt; CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('…'), or display a custom string.&lt;/p&gt;

&lt;p&gt;That was a quick simple css trick, hope you enjoy it! 💫&lt;/p&gt;

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

</description>
      <category>css</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>My top 5 favourite React Hook libraries</title>
      <dc:creator>Xiaomin Zhu</dc:creator>
      <pubDate>Tue, 29 Jun 2021 15:24:11 +0000</pubDate>
      <link>https://dev.to/xiaominzhu88/my-top-5-favourite-react-hook-libraries-kaf</link>
      <guid>https://dev.to/xiaominzhu88/my-top-5-favourite-react-hook-libraries-kaf</guid>
      <description>&lt;h2&gt;
  
  
  A junior’s advice — give it a try.
&lt;/h2&gt;

&lt;p&gt;I have been in contact with &lt;strong&gt;React&lt;/strong&gt; for nearly 10 months and my opinion is that React hooks not only make code cleaner but also improves readability and reduces the amount of the code. For juniors like me who don’t have much experience, getting started is not difficult.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you haven’t used hooks yet, you should try and add them to your project, because it can really make your programming simple and interesting.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In this blog, I would like to share 5 React hook libraries with you which I tried in some projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. useMedia ✂️
&lt;/h3&gt;

&lt;p&gt;This hook provides a simple way to track CSS &lt;strong&gt;media queries&lt;/strong&gt; and it plays a vital role in responsive websites, it is helpful for rendering different components at different &lt;strong&gt;viewports&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, you might have a hamburger icon which you want to show with a dropdown list field only on smaller screens, but hide them on larger screens. &lt;strong&gt;useMedia&lt;/strong&gt; provides a quick solution to help solve this problem.&lt;br&gt;
Code example:&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%2Fuploads%2Farticles%2Fh53mxeiftxlu2ksiu61u.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%2Fuploads%2Farticles%2Fh53mxeiftxlu2ksiu61u.png" alt="1_J5KzeEDpjJXi81CUXZbelQ"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Resize the screen and trigger different content.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. React-hook-form 📋
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://react-hook-form.com/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No one likes to create and recreate complex forms with validation, including React developers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;React-hook-form&lt;/strong&gt; is a hook about forms:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Performant, flexible and extensible forms with easy-to-use validation”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With its simpler syntax, speed, less re-rendering, and better maintainability, it started to reach the top in GitHub.&lt;/p&gt;

&lt;p&gt;To use react-hook-form, we only need to call the &lt;strong&gt;useForm&lt;/strong&gt; hook, when we do this, we will get an object from which we will deconstruct the &lt;strong&gt;register&lt;/strong&gt; property.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Register&lt;/strong&gt; is a function, it will accept the input value entered by the user and verify it, it will also pass each value to a function, which will be called when the form is submitted, so we need to connect it to each input as a &lt;strong&gt;ref&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In order for register to work properly, we need to provide an appropriate &lt;strong&gt;“name”&lt;/strong&gt; attribute for each input. For example, for user name input, its name is &lt;strong&gt;“username”&lt;/strong&gt;, the reason for this is that when we submit the form, we will get all the input values on a single object.&lt;br&gt;
Code Example:&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%2Fuploads%2Farticles%2Fnxnhlm6p65nzw8bpnz5i.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%2Fuploads%2Farticles%2Fnxnhlm6p65nzw8bpnz5i.png" alt="1_Q74uRa7SgZtKxdhDU8EzeQ"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The attributes of each object will be named according to the input name attribute we specified.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In order to handle submitting the form and receiving input data, we will add an &lt;strong&gt;onSubmit&lt;/strong&gt; to the form element and connect it to the local function of the same name.&lt;/p&gt;

&lt;p&gt;From &lt;strong&gt;useForm&lt;/strong&gt;, we will get a function named &lt;strong&gt;handleSubmit&lt;/strong&gt;, we wrap it around &lt;strong&gt;onSubmit&lt;/strong&gt; as a higher-order function, the &lt;strong&gt;handleSubmit&lt;/strong&gt; function will be responsible for collecting all the data entered into each input, and we will receive an object named data in &lt;strong&gt;onSubmit&lt;/strong&gt;.&lt;br&gt;
Code Example:&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1xy1jtphu9wywy9yksel.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%2Fuploads%2Farticles%2F1xy1jtphu9wywy9yksel.png" alt="1_4_VkRTjN4ayM10RzBBr2FA"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;With console.log(data), we can see what we entered in each input of the same attribute.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To validating the form and adding constraints for each input value, we only need to pass the information to the &lt;strong&gt;register&lt;/strong&gt; function.&lt;/p&gt;

&lt;p&gt;The first attribute is &lt;strong&gt;required&lt;/strong&gt;. By default, it is set to &lt;strong&gt;false&lt;/strong&gt;, but we can set it &lt;strong&gt;true&lt;/strong&gt;to ensure that the form is not submitted when the form is not filled out.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmx21s6rlpn8p7p0y1ku.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%2Fuploads%2Farticles%2Fwmx21s6rlpn8p7p0y1ku.png" alt="1_u37hVAYVBtcHjmH90TF6UA"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;To apply this verification, username value is required, we can set the value length greater than 6 characters but less than 24 characters.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If we use number for this input (assuming this input is about the age of a person), we will use the attributes min and max instead of &lt;strong&gt;minLength&lt;/strong&gt; and &lt;strong&gt;maxLength&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. React router📍
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://reactrouter.com/web/guides/quick-start" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;br&gt;
React router is one of the most popular React libraries, it is used for routing and obtaining application URL history records.&lt;/p&gt;

&lt;p&gt;The most eye-catching hooks provided are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;useHistory&lt;/li&gt;
&lt;li&gt;useLocation&lt;/li&gt;
&lt;li&gt;useParams&lt;/li&gt;
&lt;li&gt;useRouteMatch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Its name speaks for itself:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;useHistory&lt;/strong&gt; will get the method of application history data.&lt;br&gt;
Code Example:&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuq4zy0qflqafemdcsb6b.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%2Fuploads%2Farticles%2Fuq4zy0qflqafemdcsb6b.png" alt="1_seOWADLhUU2F9YxSSStyAQ"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Click on the button, page will be navigated to “home” page.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;useLocation&lt;/strong&gt; will return an object representing the current URL.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbg0vidzq5a6qw6qrunx.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%2Fuploads%2Farticles%2Fvbg0vidzq5a6qw6qrunx.png" alt="1_6Za82cZ4bNv2iWuC7DhskA"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Trigger a new “page view” event whenever a new page loads.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UseParams&lt;/strong&gt; will return the object of the key-value pairs of the URL parameters of the current route.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fde0crqil20ska4sbs38a.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%2Fuploads%2Farticles%2Fde0crqil20ska4sbs38a.png" alt="1_m7KgVOQ9vkZwaXyoUfljOw"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;In this way, with “: id” you can access the parameters of the current route’s URL.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;useRouteMatch&lt;/strong&gt; will try to match the current URL with the given URL, which can be a string or an object with different options.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8f3lyjaqek3hoty5ip2p.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%2Fuploads%2Farticles%2F8f3lyjaqek3hoty5ip2p.png" alt="1_IPwcmEVuB1B1t66eLELwsQ"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;“match” is an object which contains current path, url…&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Redux hooks 🛒
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://react-redux.js.org/api/hooks" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;br&gt;
Redux is used as a global state manager throughout the application. A few months after the Hook was released by the React community, Redux added Hook support. This Hook can be used to replace the previous high-level component method &lt;strong&gt;connect()&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The most eye-catching hooks provided are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;useSelector&lt;/li&gt;
&lt;li&gt;useDispatch&lt;/li&gt;
&lt;li&gt;useStore&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;useSelector&lt;/strong&gt; allows you to extract data from the Redux store state, using a selector function, may return any value as a result, not just an object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;useDispatch&lt;/strong&gt; returns a reference to the dispatch function from the Redux store. You may use it to dispatch actions as needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;useStore&lt;/strong&gt; returns a reference to the same Redux store that was passed into the  component.&lt;/p&gt;

&lt;p&gt;My personal opinion is, the documentation is good but a bit complicated, to start using it, you still have to read the documentation, 🧩 until now I’m only in the elementary stage.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. usePortal 🖼
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/alex-cory/react-useportal" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;br&gt;
usePortal makes it easy to create drop-down menus, modal boxes, notification pop-up windows, bubble prompt boxes, etc…&lt;br&gt;
It provides a way to create elements outside the &lt;strong&gt;DOM&lt;/strong&gt; hierarchy of the application.&lt;br&gt;
Code Example:&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxzir0xmszxu1lbo79rb.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%2Fuploads%2Farticles%2Ftxzir0xmszxu1lbo79rb.png" alt="1_imgcECn6skAkFaXdbgOCYQ"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;With “Open” button you can open Portal with a “Close Portal” button, hit ESC or click outside to close it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The examples above is just my personal suggestion. I have added a link below each hook title where you can directly refer to the original site, if you find anything that can be improved or corrected, please contact me.&lt;/p&gt;

&lt;p&gt;Thank you very much for reading! &lt;/p&gt;

</description>
      <category>react</category>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>javascript</category>
    </item>
    <item>
      <title>From Music to Web Development -My Path</title>
      <dc:creator>Xiaomin Zhu</dc:creator>
      <pubDate>Wed, 09 Jun 2021 11:22:36 +0000</pubDate>
      <link>https://dev.to/xiaominzhu88/from-music-to-web-development-my-path-1ide</link>
      <guid>https://dev.to/xiaominzhu88/from-music-to-web-development-my-path-1ide</guid>
      <description>&lt;p&gt;&lt;em&gt;From being a musician of a symphony orchestra to a web developer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Since I was a child, my parents focused on cultivating my music literacy. My father is a famous musician and my mother is a doctor. Yes, I am also talented, my ears are born with absolute hearing. I can tell the exact pitch with closed eyes when people press any key on the piano. It would make sense that music should be my future career, right?&lt;/p&gt;

&lt;h3&gt;
  
  
  Going to a foreign country to continue music studies
&lt;/h3&gt;

&lt;p&gt;After high school, I was admitted to the Shanghai Conservatory of Music where I studied hard for 4 years to obtain a diploma. In the second week, after receiving the certificate, I decided to visit Vienna, the famous city of music in Austria, because I didn’t want to stay at home for a career under the cover of my parents like a child forever. So I packed my bags and boarded a plane.&lt;/p&gt;

&lt;p&gt;In Vienna, I passed the entrance exams to get into a Master's course. “Don’t be idle anyway and give it a try” I thought. I signed up and came to the examination room. The result was very pleasant, I didn’t speak a word of German but I was admitted. Yes, I was proud of myself.&lt;/p&gt;

&lt;p&gt;The studying journey in Vienna allowed me to make many friends, speak German fluently, co-operate with orchestras, whom I often performed with abroad. It was around the time I was about to graduate, that I met my husband.&lt;/p&gt;

&lt;p&gt;The world is sometimes so wonderful. On the night of our wedding, I had to perform in the world-famous Golden Hall in Vienna. It was so stressful that after our concert and dinner I fell asleep while walking.&lt;/p&gt;

&lt;h3&gt;
  
  
  The second turning point: Become a store manager assistant in a luxury company
&lt;/h3&gt;

&lt;p&gt;Less than a year after marriage, my husband and I noticed that, although we live together, we rarely see each other. The reason was that I often traveled to other cities or even other countries to perform. So I made the decision, to have a normal 9–5 job.&lt;/p&gt;

&lt;p&gt;I experienced different jobs like filmset catering, concert performer just for one day, and finally as a store manager assistant of a luxury goods company. There I faced a variety of different orders every day and was able to arrange the warehouse inventory, dealing with customers from different countries, and collaborating with fashion designers.&lt;/p&gt;

&lt;p&gt;My motivation were simple: 1. The job has fixed working hours; 2. I could meet people in various industries.&lt;/p&gt;

&lt;h3&gt;
  
  
  The third turning point: Start learning Web Development
&lt;/h3&gt;

&lt;p&gt;Time goes by fast and my enthusiasm became less and less after I became an Austrian citizen. I was now determined to enter the third turning point in my life.&lt;/p&gt;

&lt;p&gt;I have to thank my previous company as it allowed me to come into contact with a lot of amazing web pages and different celebrity blogs, which acted as a catalyst. On a whim I asked myself, can I create one? Let me Google how to make one.&lt;br&gt;
In the beginning, I just wanted to create a simple page for fun. After I learned HTML by myself, I found that it would be cool if I could change some styles... So I started to learn CSS.&lt;/p&gt;

&lt;p&gt;My husband was very supportive of my decision and he introduced me to a developer colleague in his company. Since then, we’ve met and he helped me to get in touch with GIT, understand DOM… I mean the most basic knowledge. Can you say that I have just stepped into the web development branch? Not sure, because everyone says “HTML is not a language.”&lt;/p&gt;

&lt;p&gt;Since I came into contact with JavaScript for 3 weeks, my head was turned by some small achievements. I heard about React, so why don’t I give it a try? However, after learning React by myself after 2 weeks, I noticed that when I review the code which I wrote a few days ago, I was lost... I noticed that I had learned so much but forgot almost everything which made me want to give up.&lt;/p&gt;

&lt;p&gt;At that point, by chance, I ran into a friend who had a similar experience. She told me that it might be too early for me to learn React because I haven’t mastered the basic knowledge yet, so, with the idea of giving myself a second chance, I jumped back to JavaScript and continued with the basics.&lt;/p&gt;

&lt;p&gt;After one month, another whim came to my mind. How about a course? Maybe it will help me with a learning direction? In fact, my mind was still in chaos at that time. Thanks to my husband for his continued support, I found a Bootcamp and signed up.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Bootcamp
&lt;/h3&gt;

&lt;p&gt;It was a 12-week Web Development Bootcamp &lt;a href="https://upleveled.io"&gt;Link&lt;/a&gt; and on the second day, we started to get familiar with Node.js. It was like a fantasy for me, I understood almost nothing. I often could only sleep for 4 hours a night (down from my usual 7 hours). My feeling was: This kind of learning method is crueler than a war.&lt;/p&gt;

&lt;p&gt;In fact, I have to say that you need to go into the bootcamp with the right mentality and focus. You will not be an expert by the end. You will still have plenty of questions. However, it’s a start and you must accept that not all the learnings will stick.&lt;/p&gt;

&lt;p&gt;I remember that there were nine people in that class. Three of them gave up in second, fourth and fifth weeks but I persisted until the end. After doing a few small projects the Bootcamp colleges were prepared us for a job search(what? after weeks of learning?). In fact, for me, it would be satisfying to get an internship because my feeling was I KNOW NOTHING and I was not confident at all. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Interview
&lt;/h3&gt;

&lt;p&gt;The first remote interview (because of covid-19) was an experience I will never forget. The CTO of the company gave me a sentence after asking me a bunch of skill questions: “It doesn’t matter if you don’t know everything, I will send you a TEST…”, I was speechless because I didn’t understand what he was asking for.&lt;/p&gt;

&lt;p&gt;A few days later, I received an email which contains a TEST with attached: “Normally this test will take 2.5 hours, since you are a junior, you can complete it in 7 hours, but after you opened the test, you should finish it without a break”... &lt;/p&gt;

&lt;p&gt;I opened and it requested that the camera be turned on. From the moment I turned on the camera I knew that the next result should only be known to God, because there were so many “Terminology” which I never heard before and didn’t know where to start with those questions.&lt;/p&gt;

&lt;p&gt;I completed the assignment in 4 hours. Unfortunately, I didn’t pass the test. What was disappointing was that I didn’t receive feedback or a response from the company. I politely wrote an email explaining the situation and expressed my apologies that I did not meet their requirements. That I will continue to improve my skills and so on. The result was that I still haven’t received any response — — maybe I really did that terrible. It was hard, but I’m not the type of person who gives up easily, not in this case.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Final turning point
&lt;/h3&gt;

&lt;p&gt;One week later, I had the Bootcamp graduation presentation with my final project that I created with Next.js. It was a funny App about dog adoption. I believe people liked it because I got several requests from companies that were looking for a junior developer. After I went through interviews, I was lucky enough to get a chance from a company and started with my first IT position. &lt;/p&gt;

&lt;p&gt;That was my road to web development. I hope this article can inspire you whether you have similar experiences or ideas or intention. Nothing is impossible and it’s never too late to be a beginner.&lt;/p&gt;

&lt;p&gt;Thank you for reading my first article!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>react</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
