From 0f312c31a90b3b5bf5a919bd883512bb97f9d487 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sat, 30 Sep 2023 23:06:28 +0400 Subject: [PATCH 01/41] Update post.md First changes --- day-01/post.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/day-01/post.md b/day-01/post.md index 0111534d..c02fe42b 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -28,11 +28,13 @@ Let's get started. We'll start [at the very beginning](https://www.youtube.com/w [React](https://facebook.github.io/react/) is a JavaScript library for building user interfaces. It is the view layer for web applications. -At the heart of all React applications are **components**. A component is a self-contained module that renders some output. We can write interface elements like a button or an input field as a React component. Components are _composable_. A component might include one or more other components in its output. +At the heart of all React applications are **components**. As their name suggests, React components are small self-contained pieces of web application. Components can be as small as a button, or an individual input field on the page. -Broadly speaking, to write React apps we write React components that correspond to various interface elements. We then organize these components inside higher-level components which define the structure of our application. +Components are building blocks of an application, but they are also building blocks for other, larger components. For example - previous examples of button or input components can be a part of larger form component. -For example, take a form. A form might consist of many interface elements, like input fields, labels, or buttons. Each element inside the form can be written as a React component. We'd then write a higher-level component, the form component itself. The form component would specify the structure of the form and include each of these interface elements inside of it. +Process of building apps in React is writing React components to build up our interface. Similar to collecting pieces to complete a puzzle. Smaller components like buttons and input fields combine to make larger components, like forms. + +React web application is nothing but a component tree made up of components like forms, made up of even smaller components themselves. Importantly, each component in a React app abides by strict data management principles. Complex, interactive user interfaces often involve complex data and application state. The surface area of React is limited and aimed at giving us the tools to be able to anticipate how our application will look with a given set of circumstances. We dig into these principles later in the course. From ae9a778ad59b4bf65afae6a79f5ed344dff33b3e Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sun, 1 Oct 2023 00:01:14 +0400 Subject: [PATCH 02/41] Update post.md Added live demo. --- day-01/post.md | 41 ++++++++++------------------------------- 1 file changed, 10 insertions(+), 31 deletions(-) diff --git a/day-01/post.md b/day-01/post.md index c02fe42b..cb248870 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -28,43 +28,22 @@ Let's get started. We'll start [at the very beginning](https://www.youtube.com/w [React](https://facebook.github.io/react/) is a JavaScript library for building user interfaces. It is the view layer for web applications. -At the heart of all React applications are **components**. As their name suggests, React components are small self-contained pieces of web application. Components can be as small as a button, or an individual input field on the page. +At the heart of all React applications are **components**. As their name suggests, React components are self-contained pieces of web application. Components can be as small as a button or an input field. -Components are building blocks of an application, but they are also building blocks for other, larger components. For example - previous examples of button or input components can be a part of larger form component. +Components are often building blocks for other, larger components. For example - button or input components can be a part of larger form component. -Process of building apps in React is writing React components to build up our interface. Similar to collecting pieces to complete a puzzle. Smaller components like buttons and input fields combine to make larger components, like forms. +Building React apps is writing small individual components and composing them into larger components that make up the React application. React provides guardrails so developers can easily organize many small components to build complex user interfaces. -React web application is nothing but a component tree made up of components like forms, made up of even smaller components themselves. +## Okay, so how do we use it? -Importantly, each component in a React app abides by strict data management principles. Complex, interactive user interfaces often involve complex data and application state. The surface area of React is limited and aimed at giving us the tools to be able to anticipate how our application will look with a given set of circumstances. We dig into these principles later in the course. +There are several ways to approach building web applications in React. -## Okay, so how do we use it? +For now, let's work with cloud-based IDEs with ready templates for React projects ready to go. + +Let's look at CodeSandbox example of a React app that says 'Hello World'. + +[![Edit hello world!](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/hello-world-p4wj53?fontsize=14&hidenavigation=1&theme=dark) -React is a JavaScript framework. Using the framework is as simple as including a JavaScript file in our HTML and using the `React` exports in our application's JavaScript. - -For instance, the _Hello world_ example of a React website can be as simple as: - -```html - - - - Hello world - - - - - - -
- - - -```
From 87a6117e37d50a8c31c764b5df062e3e29bf25c6 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sun, 1 Oct 2023 00:01:53 +0400 Subject: [PATCH 03/41] Update post.md try 2 --- day-01/post.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/day-01/post.md b/day-01/post.md index cb248870..1a82575b 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -42,8 +42,12 @@ For now, let's work with cloud-based IDEs with ready templates for React project Let's look at CodeSandbox example of a React app that says 'Hello World'. -[![Edit hello world!](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/hello-world-p4wj53?fontsize=14&hidenavigation=1&theme=dark) - +
From 8f17d5986cbf050a4e908c1148a93d56cc435e00 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sun, 1 Oct 2023 00:30:27 +0400 Subject: [PATCH 04/41] Update post.md explanation of how React works --- day-01/post.md | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/day-01/post.md b/day-01/post.md index 1a82575b..c1aa65ca 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -40,7 +40,7 @@ There are several ways to approach building web applications in React. For now, let's work with cloud-based IDEs with ready templates for React projects ready to go. -Let's look at CodeSandbox example of a React app that says 'Hello World'. +Let's look at a simple React app that says 'Hello World'. -
+We have our main component 'App' that returns what looks like an HTML code - a header with the text 'Hello World'. -Although it might look a little scary, the JavaScript code is a single line that dynamically adds _Hello world_ to the page. Note that we only needed to include a handful of JavaScript files to get everything working. +But why does a function return HTML, and how does the value returned by the function end up on the page? + +A lot of this seems like magic, but it's a simple setup, which we'll explain to show you the essence of how JavaScript code translates into real HTML elements on the page. ## How does it work? -Unlike many of its predecessors, React operates not directly on the browser's Document Object Model (DOM) immediately, but on a **virtual DOM**. That is, rather than manipulating the `document` in a browser after changes to our data (which can be quite slow) it resolves changes on a DOM built and run entirely in memory. After the virtual DOM has been updated, React intelligently determines what changes to make to the actual browser's DOM. +If you look at the body of `index.html` file in our project, it has an empty `
` container with the id of 'root'. However, an innocent HTML element doesn't yet explain the React 'magic'. + +Next, let's move on to `index.js` file, where `document.getElementById()` method gets the empty container and stores it in the variable named `rootElement`. + +If you aren't familiar, `document.getElementById()` is a common method for working with individual DOM elements. You pass it the element's ID as a string and the method returns that element's DOM node. + +In this case, we access empty `
` container from `index.html`. + +Once we have access to the empty `
`, we are going to use it as a space for our container to live. This is where React high-level API comes into play. + +'createRoot' is a method that transforms empty container into a place for our React application to live. It provides many useful methods empty container does not have. + +One of the methods is render, which we call on `root` to get our application going. -The [React Virtual DOM](https://facebook.github.io/react/docs/dom-differences.html) exists entirely in-memory and is a representation of the web browser's DOM. Because of this, when we write a React component, we're not writing directly to the DOM, but we're writing a virtual component that React will turn into the DOM. +high-level API is what happens under the hood. React provides us with easy, friendly syntax like functions to write React components. It does the hard work of translating that friendly syntax into these difficult and scary (even for experienced developers) calls to high-level API. -In the next article, we'll look at what this means for us as we build our React components and jump into JSX and writing our first real components. +Truth is, you only need to work with high-level API once - to create the React application. Once it's done, you can revert back to simpler syntax. +we use `createRoot()` method to create a root - From 3edf925e9ef7f5a52157a2cb4eb61e004525ffd6 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sun, 1 Oct 2023 00:38:10 +0400 Subject: [PATCH 05/41] Update post.md explain React project --- day-01/post.md | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/day-01/post.md b/day-01/post.md index c1aa65ca..fed1607b 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -65,14 +65,8 @@ If you aren't familiar, `document.getElementById()` is a common method for worki In this case, we access empty `
` container from `index.html`. -Once we have access to the empty `
`, we are going to use it as a space for our container to live. This is where React high-level API comes into play. +Once we have access to the empty `
`, will use the 'createRoot' method to transform empty HTML container into a place for our component to live. -'createRoot' is a method that transforms empty container into a place for our React application to live. It provides many useful methods empty container does not have. - -One of the methods is render, which we call on `root` to get our application going. - -high-level API is what happens under the hood. React provides us with easy, friendly syntax like functions to write React components. It does the hard work of translating that friendly syntax into these difficult and scary (even for experienced developers) calls to high-level API. - -Truth is, you only need to work with high-level API once - to create the React application. Once it's done, you can revert back to simpler syntax. -we use `createRoot()` method to create a root - +`createRoot` rarely comes up outside of when you need to create a container for React app, so it's enough to know that 'createRoot' gives the container many properties and useful methods it needs to 'host' our React app. +We call one of those methods `render`, which renders our component `App`. From e0acf9f528848ce2dc6f8cbcf8a035f065b189ee Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sun, 1 Oct 2023 00:46:00 +0400 Subject: [PATCH 06/41] Update post.md tried to explain high-level API better --- day-01/post.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/day-01/post.md b/day-01/post.md index fed1607b..7f742bad 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -67,6 +67,8 @@ In this case, we access empty `
` container from `index.html`. Once we have access to the empty `
`, will use the 'createRoot' method to transform empty HTML container into a place for our component to live. -`createRoot` rarely comes up outside of when you need to create a container for React app, so it's enough to know that 'createRoot' gives the container many properties and useful methods it needs to 'host' our React app. +For now, you don't need to concern yourself with `createRoot`, just know that it gives plain HTML container properties and methods so it can become home for our React app. -We call one of those methods `render`, which renders our component `App`. +One of those methods is 'render'. Without going into details, this method renders our one component 'App' inside the container. + +This is the link between component 'App' that displays 'Hello World' and HTML contents of our app. From 5dbe2337a03f577772c5a68e961935ca5442ef60 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Wed, 4 Oct 2023 17:41:48 +0400 Subject: [PATCH 07/41] Update post.md first changes --- day-01/post.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/day-01/post.md b/day-01/post.md index 7f742bad..632bcbe4 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -28,11 +28,11 @@ Let's get started. We'll start [at the very beginning](https://www.youtube.com/w [React](https://facebook.github.io/react/) is a JavaScript library for building user interfaces. It is the view layer for web applications. -At the heart of all React applications are **components**. As their name suggests, React components are self-contained pieces of web application. Components can be as small as a button or an input field. +At the heart of all React applications are **components**. As their name suggests, React components are self-contained pieces of UI that put together, make up the web application. A component can be as small as a button or an input field, or a large component made up of smaller components. For example - a Form component that contains smaller Button and Input components. -Components are often building blocks for other, larger components. For example - button or input components can be a part of larger form component. +Process of building React apps is writing and organizing small components into larger structures, making sure that individual components are flexible and reusable, but also consistent. -Building React apps is writing small individual components and composing them into larger components that make up the React application. React provides guardrails so developers can easily organize many small components to build complex user interfaces. +React provides guardrails to guide us through this difficult process, so developers can easily build complex user interfaces. ## Okay, so how do we use it? From 1563c8e2adccf62c1da4762a26d6156d24c4c3fa Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Wed, 4 Oct 2023 17:45:48 +0400 Subject: [PATCH 08/41] Update post.md 2nd changes --- day-01/post.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/day-01/post.md b/day-01/post.md index 632bcbe4..23270af7 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -28,7 +28,7 @@ Let's get started. We'll start [at the very beginning](https://www.youtube.com/w [React](https://facebook.github.io/react/) is a JavaScript library for building user interfaces. It is the view layer for web applications. -At the heart of all React applications are **components**. As their name suggests, React components are self-contained pieces of UI that put together, make up the web application. A component can be as small as a button or an input field, or a large component made up of smaller components. For example - a Form component that contains smaller Button and Input components. +At the heart of all React applications are **components**. These are self-contained pieces of UI that when put together, make up the web application. A component can be as small as a button or an input field, or as large as a Form component that contains smaller Button and Input components. The entire React app is often a parent component that contains all other components. Process of building React apps is writing and organizing small components into larger structures, making sure that individual components are flexible and reusable, but also consistent. From 7972da7c9d455f8a0792b5fb72a478da2bf14fa2 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Wed, 4 Oct 2023 17:47:33 +0400 Subject: [PATCH 09/41] Update post.md third change --- day-01/post.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/day-01/post.md b/day-01/post.md index 23270af7..960fd73c 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -32,7 +32,7 @@ At the heart of all React applications are **components**. These are self-contai Process of building React apps is writing and organizing small components into larger structures, making sure that individual components are flexible and reusable, but also consistent. -React provides guardrails to guide us through this difficult process, so developers can easily build complex user interfaces. +React provides guardrails to guide us through this difficult process, so we, developers, can focus on building user interfaces. ## Okay, so how do we use it? From 15e741e879a075f73ba4d9837a84b250f557bd0c Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Wed, 4 Oct 2023 17:57:23 +0400 Subject: [PATCH 10/41] Update post.md finishing touch --- day-01/post.md | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/day-01/post.md b/day-01/post.md index 960fd73c..9a0673fe 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -42,24 +42,19 @@ For now, let's work with cloud-based IDEs with ready templates for React project Let's look at a simple React app that says 'Hello World'. - +[![Edit hello world!](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/hello-world-p4wj53?fontsize=14&hidenavigation=1&module=%2Fsrc%2FApp.js&theme=dark) -We have our main component 'App' that returns what looks like an HTML code - a header with the text 'Hello World'. +So far, we have a function 'App' that returns what looks like an HTML code - a header with the text 'Hello World'. -But why does a function return HTML, and how does the value returned by the function end up on the page? +'App' is a React component. React components can be written either as a function (like 'App' is) or using ES6 class syntax. Because functions are more familiar and easier to write, our examples will stick with function components. -A lot of this seems like magic, but it's a simple setup, which we'll explain to show you the essence of how JavaScript code translates into real HTML elements on the page. +All React components, like 'App' in the example, return HTML-like (**not HTML**) code to describe what UI should look like. ## How does it work? -If you look at the body of `index.html` file in our project, it has an empty `
` container with the id of 'root'. However, an innocent HTML element doesn't yet explain the React 'magic'. +The body of `index.html` file has an empty `
` container with the id of 'root'. Obviously an innocent HTML element doesn't have capabilities to render React components. -Next, let's move on to `index.js` file, where `document.getElementById()` method gets the empty container and stores it in the variable named `rootElement`. +That is why, in `index.js` file, we use `document.getElementById()` method to get the empty container and store it the variable named `rootElement`. If you aren't familiar, `document.getElementById()` is a common method for working with individual DOM elements. You pass it the element's ID as a string and the method returns that element's DOM node. From d8cd762e192b13ba02a8ac1f7e9bd1a798c895f8 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Wed, 4 Oct 2023 18:08:47 +0400 Subject: [PATCH 11/41] Update post.md final edit --- day-01/post.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/day-01/post.md b/day-01/post.md index 9a0673fe..28d1ca16 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -56,14 +56,10 @@ The body of `index.html` file has an empty `
` container with the id of 'roo That is why, in `index.js` file, we use `document.getElementById()` method to get the empty container and store it the variable named `rootElement`. -If you aren't familiar, `document.getElementById()` is a common method for working with individual DOM elements. You pass it the element's ID as a string and the method returns that element's DOM node. +> `document.getElementById()` method is frequently used in JavaScript DOM manipulation. It accepts one argument - `id` of the DOM element you want to select. -In this case, we access empty `
` container from `index.html`. +Calling `createRoot` on a plain `
` gives it necessary properties and methods to be a home for our React app. -Once we have access to the empty `
`, will use the 'createRoot' method to transform empty HTML container into a place for our component to live. +One of them is 'render', a very important method that dictates what the app should look like. In this case, it renders one component - `App` inside the container. -For now, you don't need to concern yourself with `createRoot`, just know that it gives plain HTML container properties and methods so it can become home for our React app. - -One of those methods is 'render'. Without going into details, this method renders our one component 'App' inside the container. - -This is the link between component 'App' that displays 'Hello World' and HTML contents of our app. +Tomorrow, you will learn about JSX, HTML-like syntax that helps us define components' layout. From afa876744a15ade1e47d103f4bb13c404320eac6 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Wed, 4 Oct 2023 18:10:43 +0400 Subject: [PATCH 12/41] Update post.md final --- day-01/post.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/day-01/post.md b/day-01/post.md index 28d1ca16..5302f61b 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -58,8 +58,8 @@ That is why, in `index.js` file, we use `document.getElementById()` method to ge > `document.getElementById()` method is frequently used in JavaScript DOM manipulation. It accepts one argument - `id` of the DOM element you want to select. -Calling `createRoot` on a plain `
` gives it necessary properties and methods to be a home for our React app. +Calling `createRoot()` on a plain `
` gives it necessary properties and methods to be a home for our React app. -One of them is 'render', a very important method that dictates what the app should look like. In this case, it renders one component - `App` inside the container. +One of them is `render()`, a very important method that dictates what the component should look like. In this case, it renders one component - `App` inside the container. Tomorrow, you will learn about JSX, HTML-like syntax that helps us define components' layout. From 0730da135cd5a87651222a8c44ef81da10710109 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Thu, 5 Oct 2023 14:27:55 +0400 Subject: [PATCH 13/41] Update post.md final --- day-01/post.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/day-01/post.md b/day-01/post.md index 5302f61b..49891246 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -28,7 +28,7 @@ Let's get started. We'll start [at the very beginning](https://www.youtube.com/w [React](https://facebook.github.io/react/) is a JavaScript library for building user interfaces. It is the view layer for web applications. -At the heart of all React applications are **components**. These are self-contained pieces of UI that when put together, make up the web application. A component can be as small as a button or an input field, or as large as a Form component that contains smaller Button and Input components. The entire React app is often a parent component that contains all other components. +At the heart of all React applications are **components**. These are self-contained pieces of UI that when put together, make up the web application. A component can be as small as a button or an input field, or a Form component that contains smaller Button and Input components. Process of building React apps is writing and organizing small components into larger structures, making sure that individual components are flexible and reusable, but also consistent. @@ -38,17 +38,17 @@ React provides guardrails to guide us through this difficult process, so we, dev There are several ways to approach building web applications in React. -For now, let's work with cloud-based IDEs with ready templates for React projects ready to go. +For now, let's work with cloud-based IDEs to instantly set up a React project, write React components and see changes in real time. Let's look at a simple React app that says 'Hello World'. [![Edit hello world!](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/hello-world-p4wj53?fontsize=14&hidenavigation=1&module=%2Fsrc%2FApp.js&theme=dark) -So far, we have a function 'App' that returns what looks like an HTML code - a header with the text 'Hello World'. +In this code example, we have a function `App` that returns what looks like an HTML code - a header with the text 'Hello World'. -'App' is a React component. React components can be written either as a function (like 'App' is) or using ES6 class syntax. Because functions are more familiar and easier to write, our examples will stick with function components. +`App` is a React component. React components can be written as a function (like `App` is) or using ES6 class syntax. Because functions are more familiar and easier to write, let's stick with function components for now. -All React components, like 'App' in the example, return HTML-like (**not HTML**) code to describe what UI should look like. +All React components return HTML-like (**not HTML**) code to describe what UI should look like. ## How does it work? From 16900bf0ffa80b7fe41b2a9d82e36a014867a189 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Thu, 5 Oct 2023 15:13:04 +0400 Subject: [PATCH 14/41] Update post.md intial --- day-02/post.md | 60 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/day-02/post.md b/day-02/post.md index bbbece2c..d78334a7 100644 --- a/day-02/post.md +++ b/day-02/post.md @@ -15,11 +15,49 @@ imagesDir: /assets/images/series/30-days-of-react/day-2 includeFile: ./../_params.yaml --- -In our previous article, we looked at what [React](https://facebook.github.io/react/) is and discussed at a high-level how it works. In this article, we're going to look at one part of the React ecosystem: ES6 and JSX. +In our previous article, we looked at what [React](https://facebook.github.io/react/) is and how it works. In this article, we're going to look at JSX, the HTML-like syntax that helps us easily define component layout, and ES6, modern syntax for writing JavaScript code. -## JSX/ES5/ES6 WTF??! +## What is JSX? -In any cursory search on the Internet looking for React material, no doubt you have already run into the terms `JSX`, ES5, and ES6. These opaque acronyms can get confusing quickly. +In our previous example, we saw that all React components return HTML-like code. + +That code is actually **JSX**, short for (JavaScript XML), and it saves a lot of time on writing React apps. + +If you're new to React, JSX probably feels familiar, since it looks so much like HTML. But don't get confused, all React apps are written entirely in JavaScript. At runtime, JSX code is translated into JavaScript. React sees our JSX code and helps out by writing a JavaScript code that corresponds with our JSX layout. + +Let's go back to our previous example, this is the `App` component, a friendly function that returns an `

` element. Easy to follow. + +```javascript +function App() { + return ( +
+

Hello World

+
+ ); +} +``` + +You can write React components using high-level React API and use methods like `React.createElement()`. The code for our `App` component would look like this: + +```javascript +function App() { + return React.createElement("h1", { className: "App" }, "Hello World"); +} +``` + +Our app is relatively simple and only renders one `

` element. Even then, making calls to `React.createElement()` is not as readable and friendly as JSX. + +Web applications in the real world are not so simple, and working with high-level React API can get very confusing. + +On the other hand, you are probably used to structuring layouts using HTML. That's why most React developers use JSX. + +Because JSX is just a simpler syntax to write JavaScript, it allows us to easily integrate JavaScript logic right into the markup. + +> Although in previous paradigms it was viewed as a bad habit to include JavaScript and markup in the same place, it turns out that combining the view with the functionality makes reasoning about the view straight-forward. + +## What is ES6? + +ES6 is modern syntax for JavaScript, as opposed to ES5. ES5 (the `ES` stands for ECMAScript) is basically "regular JavaScript." The 5th update to JavaScript, ES5 was finalized in 2009. It has been supported by all major browsers for several years. Therefore, if you've written or seen any JavaScript in the recent past, chances are it was ES5. @@ -34,23 +72,7 @@ We'll see how we do this a bit later in the series. > Most of the code we'll write in this series will be easily translatable to ES5. In cases where we use ES6, we'll introduce the feature at first and then walk through it. -As we'll see, all of our React components have a `render` function that specifies what the HTML output of our React component will be. **JavaScript eXtension**, or more commonly **JSX**, is a React extension that allows us to write JavaScript that _looks like_ HTML. - -> Although in previous paradigms it was viewed as a bad habit to include JavaScript and markup in the same place, it turns out that combining the view with the functionality makes reasoning about the view straight-forward. - -To see what this means, imagine we had a React component that renders an `h1` HTML tag. JSX allows us to declare this element in a manner that closely resembles HTML: - -```javascript -class HelloWorld extends React.Component { - render() { - return ( -

Hello World

- ); - } -} -``` -
The `render()` function in the `HelloWorld` component looks like it's returning HTML, but this is actually JSX. The JSX is _translated_ to regular JavaScript at runtime. That component, after translation, looks like this: From 71f746b35d2f02ca4d1b4fb6c8d876bf6349c2c2 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Thu, 5 Oct 2023 15:25:15 +0400 Subject: [PATCH 15/41] Update post.md changes --- day-02/post.md | 71 +++++++++----------------------------------------- 1 file changed, 13 insertions(+), 58 deletions(-) diff --git a/day-02/post.md b/day-02/post.md index d78334a7..1999ed34 100644 --- a/day-02/post.md +++ b/day-02/post.md @@ -45,9 +45,7 @@ function App() { } ``` -Our app is relatively simple and only renders one `

` element. Even then, making calls to `React.createElement()` is not as readable and friendly as JSX. - -Web applications in the real world are not so simple, and working with high-level React API can get very confusing. +As you can see, making calls to `React.createElement()` is not as readable and friendly as JSX, even when you have a very simple component. On the other hand, you are probably used to structuring layouts using HTML. That's why most React developers use JSX. @@ -55,6 +53,18 @@ Because JSX is just a simpler syntax to write JavaScript, it allows us to easily > Although in previous paradigms it was viewed as a bad habit to include JavaScript and markup in the same place, it turns out that combining the view with the functionality makes reasoning about the view straight-forward. + +### why `className` attribute instead of `class`? + +Because JSX is JavaScript, we can't use JavaScript reserved words. This includes words like class and for. + +React gives us the attribute className. We use it in HelloWorld to set the large class on our h1 tag. There are a few other attributes, such as the for attribute on a label that React translates into htmlFor as for is also a reserved word. We'll look at these when we start using them. + +## Virtual DOM + +While JSX looks like HTML, it is actually just a terser way to write a `React.createElement()` declaration. When a component renders, it outputs a tree of React elements or a **virtual representation** of the HTML elements this component outputs. React will then determine what changes to make to the actual DOM based on this React element representation. In the case of the `HelloWorld` component, the HTML that React writes to the DOM will look like this: + + ## What is ES6? ES6 is modern syntax for JavaScript, as opposed to ES5. @@ -74,60 +84,5 @@ We'll see how we do this a bit later in the series. -The `render()` function in the `HelloWorld` component looks like it's returning HTML, but this is actually JSX. The JSX is _translated_ to regular JavaScript at runtime. That component, after translation, looks like this: - -```javascript -class HelloWorld extends React.Component { - render() { - return ( - React.createElement( - 'h1', - {className: 'large'}, - 'Hello World' - ) - ); - } -} -``` - -While JSX looks like HTML, it is actually just a terser way to write a `React.createElement()` declaration. When a component renders, it outputs a tree of React elements or a **virtual representation** of the HTML elements this component outputs. React will then determine what changes to make to the actual DOM based on this React element representation. In the case of the `HelloWorld` component, the HTML that React writes to the DOM will look like this: - -```html -

Hello World

-``` - -> The `class extends` syntax we used in our first React component is ES6 syntax. It allows us to write objects using a familiar Object-Oriented style. -> In ES5, the `class` syntax might be translated as: -> -> ```javascript -> var HelloWorld = function() {} -> Object.extends(HelloWorld, React.Component) -> HelloWorld.prototype.render = function() {} -> ``` - -Because JSX is JavaScript, we can't use JavaScript reserved words. This includes words like `class` and `for`. - -React gives us the attribute `className`. We use it in `HelloWorld` to set the `large` class on our `h1` tag. There are a few other attributes, such as the `for` attribute on a label that React translates into `htmlFor` as `for` is also a reserved word. We'll look at these when we start using them. - -If we want to write pure JavaScript instead of rely on a JSX compiler, we can just write the `React.createElement()` function and not worry about the layer of abstraction. But we like JSX. It's especially more readable with complex components. Consider the following JSX: - -```javascript -
- Profile photo -

Welcome back Ari

-
-``` - -The JavaScript delivered to the browser will look like this: - -```javascript -React.createElement("div", null, - React.createElement("img", {src: "profile.jpg", alt: "Profile photo"}), - React.createElement("h1", null, "Welcome back Ari") -); -``` - -Again, while you can skip JSX and write the latter directly, the JSX syntax is well-suited for representing nested HTML elements. - Now that we understand JSX, we can start writing our first React components. Join us tomorrow when we jump into our first React app. From fbfb537e9c9abbb873de0dd9ed73ffa3b7db06bf Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Thu, 5 Oct 2023 19:05:19 +0400 Subject: [PATCH 16/41] Update post.md change --- day-02/post.md | 53 ++++++++++++++------------------------------------ 1 file changed, 15 insertions(+), 38 deletions(-) diff --git a/day-02/post.md b/day-02/post.md index 1999ed34..927cd05d 100644 --- a/day-02/post.md +++ b/day-02/post.md @@ -15,17 +15,17 @@ imagesDir: /assets/images/series/30-days-of-react/day-2 includeFile: ./../_params.yaml --- -In our previous article, we looked at what [React](https://facebook.github.io/react/) is and how it works. In this article, we're going to look at JSX, the HTML-like syntax that helps us easily define component layout, and ES6, modern syntax for writing JavaScript code. +In our previous article, we looked at what [React](https://facebook.github.io/react/) is and how it works. -## What is JSX? +Today, you will learn about JSX and ES6, two essential tools for developing apps with React. -In our previous example, we saw that all React components return HTML-like code. +## What is JSX? -That code is actually **JSX**, short for (JavaScript XML), and it saves a lot of time on writing React apps. +**JSX**, short for JavaScript XML, is HTML-like syntax that helps us define component layout in React. -If you're new to React, JSX probably feels familiar, since it looks so much like HTML. But don't get confused, all React apps are written entirely in JavaScript. At runtime, JSX code is translated into JavaScript. React sees our JSX code and helps out by writing a JavaScript code that corresponds with our JSX layout. +Its familiar syntax helps us easily build and maintain complex web applications in React. -Let's go back to our previous example, this is the `App` component, a friendly function that returns an `

` element. Easy to follow. +On day 1, we saw a React component return a header element with the text 'Hello World'. ```javascript function App() { @@ -37,52 +37,29 @@ function App() { } ``` -You can write React components using high-level React API and use methods like `React.createElement()`. The code for our `App` component would look like this: +HTML-like code in the `return` statement is JSX. + +Remember that JSX is simply a familiar syntax for writing JavaScript code. Once application runs, JSX is _translated_ into calls to `React.createElement()` and other JavaScript methods on Top-Level API of React. + +You can make calls to `React.createElement()` method to get the same result, but looking at the code should tell you why many React developers use JSX. ```javascript function App() { return React.createElement("h1", { className: "App" }, "Hello World"); } ``` - -As you can see, making calls to `React.createElement()` is not as readable and friendly as JSX, even when you have a very simple component. - -On the other hand, you are probably used to structuring layouts using HTML. That's why most React developers use JSX. - -Because JSX is just a simpler syntax to write JavaScript, it allows us to easily integrate JavaScript logic right into the markup. - -> Although in previous paradigms it was viewed as a bad habit to include JavaScript and markup in the same place, it turns out that combining the view with the functionality makes reasoning about the view straight-forward. +Compared to `React.createElement()` calls, JSX is more readable and familiar. Its HTML-like syntax makes it very easy to define component layouts, especially when it comes to building complex components. ### why `className` attribute instead of `class`? -Because JSX is JavaScript, we can't use JavaScript reserved words. This includes words like class and for. - -React gives us the attribute className. We use it in HelloWorld to set the large class on our h1 tag. There are a few other attributes, such as the for attribute on a label that React translates into htmlFor as for is also a reserved word. We'll look at these when we start using them. - -## Virtual DOM - -While JSX looks like HTML, it is actually just a terser way to write a `React.createElement()` declaration. When a component renders, it outputs a tree of React elements or a **virtual representation** of the HTML elements this component outputs. React will then determine what changes to make to the actual DOM based on this React element representation. In the case of the `HelloWorld` component, the HTML that React writes to the DOM will look like this: - +You may have noticed that in JSX we use `className`, not `class`. This is necessary because in JavaScript, 'class' and 'for' are reserved words, and JSX is a syntax extension of JS. So the `for` HTML attribute becomes `htmlFor` in React. ## What is ES6? -ES6 is modern syntax for JavaScript, as opposed to ES5. - -ES5 (the `ES` stands for ECMAScript) is basically "regular JavaScript." The 5th update to JavaScript, ES5 was finalized in 2009. It has been supported by all major browsers for several years. Therefore, if you've written or seen any JavaScript in the recent past, chances are it was ES5. - -ES6 is a new version of JavaScript that adds some nice syntactical and functional additions. It was finalized in 2015. ES6 is [almost fully supported](http://kangax.github.io/compat-table/es6/) by all major browsers. But it will be some time until older versions of web browsers are phased out of use. For instance, Internet Explorer 11 does not support ES6, but has about 12% of the browser market share. - -In order to reap the benefits of ES6 today, we have to do a few things to get it to work in as many browsers as we can: - -1. We have to _transpile_ our code so that a wider range of browsers understand our JavaScript. This means converting ES6 JavaScript into ES5 JavaScript. -2. We have to include a _shim_ or _polyfill_ that provides additional functionality added in ES6 that a browser may or may not have. - -We'll see how we do this a bit later in the series. - -> Most of the code we'll write in this series will be easily translatable to ES5. In cases where we use ES6, we'll introduce the feature at first and then walk through it. - +ES6 is the newest version of JavaScript that comes with many useful methods and easier syntax for building apps in React. It has wide browser support, and most web applications are written in ES6. +Sometimes ES6 is transpiled into older version of JavaScript ES5, to make sure all browsers understand ES6. Now that we understand JSX, we can start writing our first React components. Join us tomorrow when we jump into our first React app. From 373309dba9402468c009fe99dc57710220c61611 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Thu, 5 Oct 2023 23:43:02 +0400 Subject: [PATCH 17/41] Update post.md change --- day-02/post.md | 49 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/day-02/post.md b/day-02/post.md index 927cd05d..d94fdb40 100644 --- a/day-02/post.md +++ b/day-02/post.md @@ -21,39 +21,66 @@ Today, you will learn about JSX and ES6, two essential tools for developing apps ## What is JSX? -**JSX**, short for JavaScript XML, is HTML-like syntax that helps us define component layout in React. +**JSX**, short for JavaScript XML, is HTML-like syntax that helps us define component layouts in React. -Its familiar syntax helps us easily build and maintain complex web applications in React. +Let's go back to our example from day 1. -On day 1, we saw a React component return a header element with the text 'Hello World'. +We have a React component that returns an `

` element with the text 'Hello World'. + +HTML-like code the function returns is JSX. ```javascript function App() { return ( -

Hello World

-
); } ``` -HTML-like code in the `return` statement is JSX. +Remember that JSX is an extension of JavaScript. Once application runs, JSX is _translated_ into calls to `React.createElement()` and other JavaScript methods on Top-Level API of React. -Remember that JSX is simply a familiar syntax for writing JavaScript code. Once application runs, JSX is _translated_ into calls to `React.createElement()` and other JavaScript methods on Top-Level API of React. +Using JSX is not mandatory. You can make calls to `React.createElement()` method to get the same result, but the JavaScript code gets complicated very fast. -You can make calls to `React.createElement()` method to get the same result, but looking at the code should tell you why many React developers use JSX. +```javascript +function App() { + return React.createElement("h1", null, "Hello World"); +} +``` + +JSX is obviously more readable than calling the `React.createElement()` method. Difference is even more evident when you have nested elements and components. + +Let's try and add a `

` paragraph under the `

` header. + +JSX code is still fairly simple: ```javascript function App() { - return React.createElement("h1", { className: "App" }, "Hello World"); + return ( +
+

Hello World

+

Lorem ipsum dolor sit amet

+
+ ); +} +``` + +Using the `React.createElement()` method to recreate the same component would look like this: +```javascript +export default function App() { + return React.createElement("div", { className: "App" }, [ + React.createElement("h1", null, "Hello World"), + React.createElement("p", null, "Lorem ipsum dolor sit amet") + ]); } ``` -Compared to `React.createElement()` calls, JSX is more readable and familiar. Its HTML-like syntax makes it very easy to define component layouts, especially when it comes to building complex components. +As you build more complex components, code becomes even more difficult to follow. + + ### why `className` attribute instead of `class`? -You may have noticed that in JSX we use `className`, not `class`. This is necessary because in JavaScript, 'class' and 'for' are reserved words, and JSX is a syntax extension of JS. So the `for` HTML attribute becomes `htmlFor` in React. +In JSX, certain attribute names are different from HTML. For example, we use `className` instead of `class`. This is necessary because in JavaScript, 'class' and 'for' are reserved words, and JSX is a syntax extension of JS. The `for` HTML attribute becomes `htmlFor` in React. ## What is ES6? From f360537d0becd8b1ba1001df9293b0533e91f383 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Thu, 5 Oct 2023 23:58:42 +0400 Subject: [PATCH 18/41] Update post.md example --- day-02/post.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/day-02/post.md b/day-02/post.md index d94fdb40..2c8b5d30 100644 --- a/day-02/post.md +++ b/day-02/post.md @@ -27,7 +27,7 @@ Let's go back to our example from day 1. We have a React component that returns an `

` element with the text 'Hello World'. -HTML-like code the function returns is JSX. +The HTML-like code inside the return statement is JSX. ```javascript function App() { @@ -39,7 +39,7 @@ function App() { Remember that JSX is an extension of JavaScript. Once application runs, JSX is _translated_ into calls to `React.createElement()` and other JavaScript methods on Top-Level API of React. -Using JSX is not mandatory. You can make calls to `React.createElement()` method to get the same result, but the JavaScript code gets complicated very fast. +You don't have to use JSX. You can make calls to `React.createElement()` method to get the same result, but the JavaScript code gets complicated very fast. ```javascript function App() { @@ -65,6 +65,7 @@ function App() { ``` Using the `React.createElement()` method to recreate the same component would look like this: + ```javascript export default function App() { return React.createElement("div", { className: "App" }, [ @@ -74,9 +75,7 @@ export default function App() { } ``` -As you build more complex components, code becomes even more difficult to follow. - - +Every additional element makes JavaScript code exponentially more difficult to follow. Especially when elements are nested. That's why even experienced React developers use JSX. ### why `className` attribute instead of `class`? From 5ac7932e39981be8ebebdc20f2a5ddcb5bc8d6fe Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Fri, 6 Oct 2023 00:21:48 +0400 Subject: [PATCH 19/41] Update post.md final update --- day-02/post.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/day-02/post.md b/day-02/post.md index 2c8b5d30..d7f4feab 100644 --- a/day-02/post.md +++ b/day-02/post.md @@ -75,17 +75,19 @@ export default function App() { } ``` -Every additional element makes JavaScript code exponentially more difficult to follow. Especially when elements are nested. That's why even experienced React developers use JSX. +Every additional element makes JavaScript code exponentially more difficult to follow. Especially when elements are nested, have conditional classes, and more dynamic features. That's why even experienced React developers use JSX. -### why `className` attribute instead of `class`? +### Why `className` attribute instead of `class`? In JSX, certain attribute names are different from HTML. For example, we use `className` instead of `class`. This is necessary because in JavaScript, 'class' and 'for' are reserved words, and JSX is a syntax extension of JS. The `for` HTML attribute becomes `htmlFor` in React. ## What is ES6? -ES6 is the newest version of JavaScript that comes with many useful methods and easier syntax for building apps in React. It has wide browser support, and most web applications are written in ES6. +ES6 is the newest version of JavaScript that comes with many useful methods and easier syntax for writing modern web applications. At the time of writing this, most browsers support ES6. According to caniuse.com, 97% of internet surfers use browsers that support ES6. -Sometimes ES6 is transpiled into older version of JavaScript ES5, to make sure all browsers understand ES6. +ES6 code can be transpiled into ES5, older version of JavaScript, to make sure the rest of users are not left out. -Now that we understand JSX, we can start writing our first React components. Join us tomorrow when we jump into our first React app. +## Final thoughts + +Now that we understand JSX, it's time write a real web application in React. From 592aa0f79c0387df191b393d702fec2b92761773 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Fri, 6 Oct 2023 00:23:26 +0400 Subject: [PATCH 20/41] Update post.md update 2 --- day-02/post.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/day-02/post.md b/day-02/post.md index d7f4feab..0603a845 100644 --- a/day-02/post.md +++ b/day-02/post.md @@ -83,7 +83,7 @@ In JSX, certain attribute names are different from HTML. For example, we use `cl ## What is ES6? -ES6 is the newest version of JavaScript that comes with many useful methods and easier syntax for writing modern web applications. At the time of writing this, most browsers support ES6. According to caniuse.com, 97% of internet surfers use browsers that support ES6. +ES6 is the newest version of JavaScript that comes with many useful methods and easier syntax for writing modern web applications. At the time of writing this, most browsers support ES6. According to [caniuse.com](https://caniuse.com/?search=es6), 97% of internet surfers use browsers that support ES6. ES6 code can be transpiled into ES5, older version of JavaScript, to make sure the rest of users are not left out. From af9d7e0897fdff2e8129805ded3b6d4b60f77b46 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Fri, 6 Oct 2023 00:45:19 +0400 Subject: [PATCH 21/41] Update post.md final change --- day-02/post.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/day-02/post.md b/day-02/post.md index 0603a845..c7f6e703 100644 --- a/day-02/post.md +++ b/day-02/post.md @@ -81,6 +81,22 @@ Every additional element makes JavaScript code exponentially more difficult to f In JSX, certain attribute names are different from HTML. For example, we use `className` instead of `class`. This is necessary because in JavaScript, 'class' and 'for' are reserved words, and JSX is a syntax extension of JS. The `for` HTML attribute becomes `htmlFor` in React. +### A mix of markup and logic + +Unlike HTML, you can embed dynamic JavaScript expressions inside JSX. This can be mainly attributed to the fact that JSX is simply an extension of JavaScript. + +To embed JavaScript expression in JSX, you need to wrap it with curly braces. + +```javascript +function App() { + return ( +

{"Hello" + " World"}

+ ); +} +``` + +In this example, a simple `+` operator concatenates two strings `"Hello"` and `" World"`, so the component renders the header 'Hello World'. + ## What is ES6? ES6 is the newest version of JavaScript that comes with many useful methods and easier syntax for writing modern web applications. At the time of writing this, most browsers support ES6. According to [caniuse.com](https://caniuse.com/?search=es6), 97% of internet surfers use browsers that support ES6. From 5b0fa4630db74e25a07fa785901af340e01009fa Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Fri, 6 Oct 2023 01:09:38 +0400 Subject: [PATCH 22/41] Update post.md moved 'how does it work' to day 3. --- day-01/post.md | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/day-01/post.md b/day-01/post.md index 49891246..c9ab30a7 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -48,18 +48,7 @@ In this code example, we have a function `App` that returns what looks like an H `App` is a React component. React components can be written as a function (like `App` is) or using ES6 class syntax. Because functions are more familiar and easier to write, let's stick with function components for now. -All React components return HTML-like (**not HTML**) code to describe what UI should look like. +All React components return HTML-like (**not HTML**) code to describe what UI should look like. -## How does it work? +Tomorrow, you will learn about JSX, the syntax that helps us define components' layout and build dynamic web apps with React. -The body of `index.html` file has an empty `
` container with the id of 'root'. Obviously an innocent HTML element doesn't have capabilities to render React components. - -That is why, in `index.js` file, we use `document.getElementById()` method to get the empty container and store it the variable named `rootElement`. - -> `document.getElementById()` method is frequently used in JavaScript DOM manipulation. It accepts one argument - `id` of the DOM element you want to select. - -Calling `createRoot()` on a plain `
` gives it necessary properties and methods to be a home for our React app. - -One of them is `render()`, a very important method that dictates what the component should look like. In this case, it renders one component - `App` inside the container. - -Tomorrow, you will learn about JSX, HTML-like syntax that helps us define components' layout. From c5bf80dd7f4e74559a7520d9af67f3a656c483cb Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Fri, 6 Oct 2023 01:30:05 +0400 Subject: [PATCH 23/41] Update post.md how codesandbox project works, intro to more complex react apps --- day-03/post.md | 67 +++++++++++++++++--------------------------------- 1 file changed, 23 insertions(+), 44 deletions(-) diff --git a/day-03/post.md b/day-03/post.md index d327846a..78aeef64 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -16,67 +16,46 @@ imagesDir: /assets/images/series/30-days-of-react/day-3 includeFile: ./../_params.yaml --- -Let's revisit the "Hello world" app we introduced on day one. Here it is again, written slightly differently: +Let's revisit the "Hello world" app we introduced on day one. -```html - - - - - Hello world - - - - - - -
- - - +```javascript +function App() { + return ( +
+

Hello World

+
+ ); +} ``` +It's time to look at our CodeSandbox project and understand how the JSX code returned by our function component ends up on the screen. -
- -### Loading the React library +## How does it work? -We've included the source of React as a ` - - - - -
- - - -``` - -However, nothing is going to render on the screen. Do you remember why? +For example, comments on facebook are structurally the same, even if they say different things. Components give you the power to create your own structure, the skeleton for the UI, and reuse it throughout the app, or even in different projects. Concept of reusable components is very powerful and can save a lot of time. It's like if you could create your own custom element in HTML, and then reuse it instead of having to write it over and over again whenever you need it. -We haven't told React we want to render anything on the screen or _where_ to render it. We need to use the `ReactDOM.render()` function again to express to React what we want rendered and where. +When trying to implement a difficult feature in React, chances are someone has already created a custom component that perfectly implements that feature. You only have to import it and use it, you don't even have to understand how it works (although it's preferable if you did). -Adding the `ReactDOM.render()` function will render our application on screen: +Let's create our first reusable component and name it 'Entry', so we could reuse it to show different entries. ```javascript -var mount = document.querySelector('#app'); -ReactDOM.render(, mount); +- ``` -
+Reusing it is as simple as invoking a React component by its name - ``, as if it was just another HTML element. This way, you can nest components and combine components to compose complex web applications, just as **if we were writing HTML layout with nested children elements** (Google to nail the phrasing). + +If we wanted to build a journal app that shows different entries from different times, we could simply invoke the `` component in our JSX multiple times. And we would have different entries. + +But reusable components are not really useful if we can not customize their contents. -Notice that we can render our React app using the `App` class as though it is a built-in DOM component type (like the `

` and `
` tags). Here we're using it as though it's an element with the angle brackets: ``. +In HTML, we could use attributes to customize some aspects of elements, so even if it was the same element, it worked differently. For example, if we had two buttons, one might have `disabled` attribute and would be disabled. -The idea that our React components act just like any other element on our page allows us to build a component tree **just as if we were creating a native browser tree**. +React feature called **props** is somewhat similar, except it allows us to customize React components' contents, appearance, functionality, and much more. It is the absolute necessity for actually reusing the components -While we're rendering a React component now, our app still lacks richness or interactivity. Soon, we'll see how to make React components data-driven and dynamic. +## Final words -But first, in the next installment of this series, we'll explore how we can layer components. Nested components are the foundation of a rich React web application. +Our React web application got a bit smarter, but we are not even close to utilizing true potential of React. Soon, we'll see how to make React components data-driven and dynamic. +In the next installment of this series, we'll explore how to actually compose and nest components, and build component trees that make up React web applications. From 5a72e4c6f097dcc1f5497f92d685f08d8f499b4d Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Fri, 6 Oct 2023 17:16:02 +0400 Subject: [PATCH 25/41] Update post.md update --- day-03/post.md | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/day-03/post.md b/day-03/post.md index 91fa0561..ab7cb35b 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -16,38 +16,19 @@ imagesDir: /assets/images/series/30-days-of-react/day-3 includeFile: ./../_params.yaml --- -Let's revisit the "Hello world" app we introduced on day one. +Components are the foundation for building user interfaces with React. It's time you learned how to create flexible and highly reusable React components. + +Let's revisit the example from day one. ```javascript function App() { return ( -

Hello World

-
); } ``` -It's time to look at our CodeSandbox project and understand how the JSX code returned by our function component ends up on the screen. - -## How does it work? - -In `index.html` file, there is an empty `
` container with the id of 'root'. Obviously an innocent HTML element doesn't have capabilities to render React components. - -[![Edit hello world!](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/hello-world-p4wj53?fontsize=14&hidenavigation=1&module=%2Fpublic%2Findex.html&theme=dark) - -That is why, in `index.js` file, we use `document.getElementById()` method to get the empty container and store it the variable named `rootElement`. -[![Edit hello world!](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/hello-world-p4wj53?fontsize=14&hidenavigation=1&theme=dark) - -> `document.getElementById()` method is frequently used in JavaScript DOM manipulation. It accepts one argument - `id` of the DOM element you want to select. - -Calling `createRoot()` on a plain `
` gives it necessary properties and methods to be a home for our React app. - -One of them is `render()`, a very important method that dictates what the component should look like. In this case, it renders one component - `App` inside the container. - -If you inspect the header, you will see that the `

` element is indeed nested in the `
` with the `id` of 'root'. - -Don't worry - you won't need to go through this process to add every component. Once you add one, you can use JSX to render other components inside that added component, and all of its child elements and components will show up on the page. +It's time to look at our CodeSandbox project and understand how the JSX code returned by our function component ends up on the screen. ## The React app From 05b1b54245f90bbf8ab4e2f6b235b32df5454690 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Fri, 6 Oct 2023 17:16:47 +0400 Subject: [PATCH 26/41] Update post.md added 'how does it work' back to the text --- day-01/post.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/day-01/post.md b/day-01/post.md index c9ab30a7..92c9162d 100644 --- a/day-01/post.md +++ b/day-01/post.md @@ -50,5 +50,25 @@ In this code example, we have a function `App` that returns what looks like an H All React components return HTML-like (**not HTML**) code to describe what UI should look like. +## How does it work? + +In `index.html` file, there is an empty `
` container with the id of 'root'. Obviously an innocent HTML element doesn't have capabilities to render React components. + +[![Edit hello world!](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/hello-world-p4wj53?fontsize=14&hidenavigation=1&module=%2Fpublic%2Findex.html&theme=dark) + +That is why, in `index.js` file, we use `document.getElementById()` method to get the empty container and store it the variable named `rootElement`. + +[![Edit hello world!](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/hello-world-p4wj53?fontsize=14&hidenavigation=1&theme=dark) + +> `document.getElementById()` method is frequently used in JavaScript DOM manipulation. It accepts one argument - `id` of the DOM element you want to select. + +Calling `createRoot()` on a plain `
` gives it necessary properties and methods to be a home for our React app. + +One of them is `render()`, a very important method that dictates what the component should look like. In this case, it renders one component - `App` inside the container. + +If you inspect the header, you will see that the `

` element is indeed nested in the `
` with the `id` of 'root'. + +## Final words + Tomorrow, you will learn about JSX, the syntax that helps us define components' layout and build dynamic web apps with React. From ff9bd039bdfd6f5df821df1126e571ab1fc48b63 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Fri, 6 Oct 2023 20:21:02 +0400 Subject: [PATCH 27/41] Update post.md started writing reusable component --- day-03/post.md | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/day-03/post.md b/day-03/post.md index ab7cb35b..20ee6379 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -16,7 +16,7 @@ imagesDir: /assets/images/series/30-days-of-react/day-3 includeFile: ./../_params.yaml --- -Components are the foundation for building user interfaces with React. It's time you learned how to create flexible and highly reusable React components. +Today we will discuss components, the foundation for building user interfaces with React. By the end, hopefully you will see the value of creating and using components. Let's revisit the example from day one. @@ -28,27 +28,31 @@ function App() { } ``` -It's time to look at our CodeSandbox project and understand how the JSX code returned by our function component ends up on the screen. +So far, our entire React app is just one `App` component. -## The React app +It's time to learn how to create real web applications that make use of all interactive features React has to offer. -So far, our `App` component is the entire app. It's time we added more components and learned to use various features to build interactive apps with React. +Let's start with components, basic building blocks for complex user interfaces. -Real web applications can accept and respond to user inputs, receive and send HTTP requests and much more. In time, we will learn all these features. +## Reusable components -To start, let's build our first component other than `App`. +On day 1, we stated that at the heart of all React applications are _components_. Components are independent, encapsulated bits of UI. They are also reusable and save React developers a lot of time. -## Reusable components +Let's say you are developing a social media app. + +![](https://cdn3.vectorstock.com/i/1000x1000/15/02/bullet-journal-hand-drawn-note-element-vector-39081502.jpg) + +Published posts can have content and authors, but the overall structure of the post is the same. With React components, you can define overall UI structure and reuse it, passing it data to customize the content, author, or any other aspect of the post. -On day 1, we stated that at the heart of all React applications are _components_, self-contained pieces of UI (component definition). Let's try to expand on that and really understand the importance of components for building apps in React. +We create and reuse components to render a certain UI the same way we write and call functions to avoid writing the same logic over and over again. -Web applications and even mobile and desktop apps often have repeated bits of UI. +You can also borrow other React developers' components to implement advanced features without having to do any of the work. You don't even need to know how that borrowed component works. -For example, comments on facebook are structurally the same, even if they say different things. Components give you the power to create your own structure, the skeleton for the UI, and reuse it throughout the app, or even in different projects. Concept of reusable components is very powerful and can save a lot of time. It's like if you could create your own custom element in HTML, and then reuse it instead of having to write it over and over again whenever you need it. +### Write a reusable component -When trying to implement a difficult feature in React, chances are someone has already created a custom component that perfectly implements that feature. You only have to import it and use it, you don't even have to understand how it works (although it's preferable if you did). +So far, our app has one

element that says hello world. -Let's create our first reusable component and name it 'Entry', so we could reuse it to show different entries. +Let's change it to say 'Journal', and create a new component to render journal entries. ```javascript - From 09e70d6681d7987b243e087e2eb845cc40a92f60 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Fri, 6 Oct 2023 20:21:27 +0400 Subject: [PATCH 28/41] Update post.md update --- day-03/post.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/day-03/post.md b/day-03/post.md index 20ee6379..0d12e869 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -48,7 +48,7 @@ We create and reuse components to render a certain UI the same way we write and You can also borrow other React developers' components to implement advanced features without having to do any of the work. You don't even need to know how that borrowed component works. -### Write a reusable component +## Write a reusable component So far, our app has one

element that says hello world. From 4d2ef638e73422a58d8a6c0290f9656c92d4d6ae Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Fri, 6 Oct 2023 20:21:56 +0400 Subject: [PATCH 29/41] Update post.md fix --- day-03/post.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/day-03/post.md b/day-03/post.md index 0d12e869..70927dae 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -50,7 +50,7 @@ You can also borrow other React developers' components to implement advanced fea ## Write a reusable component -So far, our app has one

element that says hello world. +So far, our app has one `

` element that says hello world. Let's change it to say 'Journal', and create a new component to render journal entries. From 36ce553e38ff1cc0c01dcfbd3fe0f08f69196e37 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Fri, 6 Oct 2023 19:25:47 +0300 Subject: [PATCH 30/41] Add files via upload --- day-03/instagram clone.png | Bin 0 -> 143468 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 day-03/instagram clone.png diff --git a/day-03/instagram clone.png b/day-03/instagram clone.png new file mode 100644 index 0000000000000000000000000000000000000000..7d182c6b1707dacf92da8334557bc14909de8bc0 GIT binary patch literal 143468 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�Fv}1K!X<22hDumENEU+l_F%D1 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 literal 0 HcmV?d00001 From d1698a0628cd06db77c6c4214ad9dbcded91220c Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Fri, 6 Oct 2023 20:28:40 +0400 Subject: [PATCH 31/41] Update post.md change --- day-03/post.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/day-03/post.md b/day-03/post.md index 70927dae..2c121862 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -40,9 +40,9 @@ On day 1, we stated that at the heart of all React applications are _components_ Let's say you are developing a social media app. -![](https://cdn3.vectorstock.com/i/1000x1000/15/02/bullet-journal-hand-drawn-note-element-vector-39081502.jpg) +![](https://github.com/irakli12345/30-days-of-react/blob/master/day-03/instagram%20clone.png) -Published posts can have content and authors, but the overall structure of the post is the same. With React components, you can define overall UI structure and reuse it, passing it data to customize the content, author, or any other aspect of the post. +Individual posts can have different content and authors, but the overall structure of the post is the same. The most efficient way to write code for different posts is to define overall UI structure and reuse it. Then pass it data to customize content, author, or any other aspect of the post. We create and reuse components to render a certain UI the same way we write and call functions to avoid writing the same logic over and over again. From d225d61a99490ac3ad73742d57fa02dae14d698b Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sat, 7 Oct 2023 01:36:23 +0400 Subject: [PATCH 32/41] Update post.md update code examples --- day-03/post.md | 63 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 14 deletions(-) diff --git a/day-03/post.md b/day-03/post.md index 2c121862..31e061e8 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -16,7 +16,7 @@ imagesDir: /assets/images/series/30-days-of-react/day-3 includeFile: ./../_params.yaml --- -Today we will discuss components, the foundation for building user interfaces with React. By the end, hopefully you will see the value of creating and using components. +Today we will discuss components, UI building blocks in React. By the end, hopefully you will have learned how to build and design excellent React components and the benefits of doing so. Let's revisit the example from day one. @@ -32,41 +32,76 @@ So far, our entire React app is just one `App` component. It's time to learn how to create real web applications that make use of all interactive features React has to offer. -Let's start with components, basic building blocks for complex user interfaces. +For starters, let's learn how to create reusable components. ## Reusable components -On day 1, we stated that at the heart of all React applications are _components_. Components are independent, encapsulated bits of UI. They are also reusable and save React developers a lot of time. +On day 1, we stated that at the heart of all React applications are _components_. Components are independent, encapsulated bits of UI. More importantly, reusable components can save you a lot of time. + +In JavaScript, we define functions to perform common tasks by reusing logic. Similarly, components enable us to reuse parts of UI. Let's say you are developing a social media app. ![](https://github.com/irakli12345/30-days-of-react/blob/master/day-03/instagram%20clone.png) -Individual posts can have different content and authors, but the overall structure of the post is the same. The most efficient way to write code for different posts is to define overall UI structure and reuse it. Then pass it data to customize content, author, or any other aspect of the post. - -We create and reuse components to render a certain UI the same way we write and call functions to avoid writing the same logic over and over again. +Individual posts have different content and authors, but overall structure is the same. React allows you to define components' interface, so you can customize their content. -You can also borrow other React developers' components to implement advanced features without having to do any of the work. You don't even need to know how that borrowed component works. +React community created libraries of reusable React components you can borrow to implement advanced features without having to write any of the code. ## Write a reusable component -So far, our app has one `

` element that says hello world. +So far, our app has one `

` element that says 'Hello World'. + +Let's change header text to say 'Journal' and create new components for entries in the journal. -Let's change it to say 'Journal', and create a new component to render journal entries. +For now, let's keep `Entry` components simple. A simple `

` paragraph in a `

` container will be fine. ```javascript -- +function Entry() { + return ( +
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim + ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut + aliquip ex ea commodo consequat. +

+
+ ); +} ``` +We added lorem ipsum text as an example. -Reusing it is as simple as invoking a React component by its name - ``, as if it was just another HTML element. This way, you can nest components and combine components to compose complex web applications, just as **if we were writing HTML layout with nested children elements** (Google to nail the phrasing). +You can invoke custom React components by their name. JSX is great because it allows us to compose React components and elements to build interfaces the same way we build layouts in HTML. -If we wanted to build a journal app that shows different entries from different times, we could simply invoke the `` component in our JSX multiple times. And we would have different entries. +Let's say our journal has three entries: + +```javascript +export default function Journal() { + return ( +
+

Journal

+ + + +
+ ); +} +``` + +So far, JSX code is pretty simple. We one `

` element and three custom `` components inside a `
`. + +> React has one important rule - components are allowed to return only one element. In this case, our `Journal` component returns multiple `` components, so we must wrap them in a `
`. So technically, component returns one `
` element. But reusable components are not really useful if we can not customize their contents. -In HTML, we could use attributes to customize some aspects of elements, so even if it was the same element, it worked differently. For example, if we had two buttons, one might have `disabled` attribute and would be disabled. +## Customize components + +Props are somewhat similar to attributes in HTML. We will explore them in detail later. In HTML, we could set attributes to customize HTML elements to some degree. React feature called **props** is somewhat similar, except it allows us to customize React components' contents, appearance, functionality, and much more. It is the absolute necessity for actually reusing the components + +The problem now, is that all entry components are the same. We need some way to pass them strings, so they display different texts. + -React feature called **props** is somewhat similar, except it allows us to customize React components' contents, appearance, functionality, and much more. It is the absolute necessity for actually reusing the components ## Final words From 920c110c0e12a0aac4943514022a698fc24d97b4 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sat, 7 Oct 2023 14:35:22 +0400 Subject: [PATCH 33/41] Update post.md final updates --- day-03/post.md | 65 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 19 deletions(-) diff --git a/day-03/post.md b/day-03/post.md index 31e061e8..0843843d 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -30,29 +30,27 @@ function App() { So far, our entire React app is just one `App` component. -It's time to learn how to create real web applications that make use of all interactive features React has to offer. +It's time to learn how to create real web applications and make use of all interactive features React has to offer. -For starters, let's learn how to create reusable components. +Let's start with reusable components. ## Reusable components -On day 1, we stated that at the heart of all React applications are _components_. Components are independent, encapsulated bits of UI. More importantly, reusable components can save you a lot of time. +On day 1, we stated that at the heart of all React applications are _components_, reusable fragments of UI. -In JavaScript, we define functions to perform common tasks by reusing logic. Similarly, components enable us to reuse parts of UI. +Component reusability is like using JavaScript functions to avoid writing the same lines of code. It saves us time and makes the UI consistent throughout the web application. -Let's say you are developing a social media app. +Let's say you are developing a social media app and need to create a `` component. ![](https://github.com/irakli12345/30-days-of-react/blob/master/day-03/instagram%20clone.png) -Individual posts have different content and authors, but overall structure is the same. React allows you to define components' interface, so you can customize their content. - -React community created libraries of reusable React components you can borrow to implement advanced features without having to write any of the code. +Posts can have different content and authors, but their overall structure is always the same. Author's name goes in the top-left corner, picture(s) in the center, and number of likes at the bottom. With React, you can define the overall structure of the `` component and reuse it whenever user makes a new post. ## Write a reusable component So far, our app has one `

` element that says 'Hello World'. -Let's change header text to say 'Journal' and create new components for entries in the journal. +Let's change header text to say 'Journal' and create new component for entries in the journal. For now, let's keep `Entry` components simple. A simple `

` paragraph in a `

` container will be fine. @@ -61,10 +59,7 @@ function Entry() { return (

- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim - ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut - aliquip ex ea commodo consequat. + Lorem ipsum dolor sit amet...

); @@ -72,7 +67,7 @@ function Entry() { ``` We added lorem ipsum text as an example. -You can invoke custom React components by their name. JSX is great because it allows us to compose React components and elements to build interfaces the same way we build layouts in HTML. +You can invoke custom React components by their name. JSX is great because it allows us to compose elements and components the same way we build layouts in HTML. Let's say our journal has three entries: @@ -89,18 +84,50 @@ export default function Journal() { } ``` -So far, JSX code is pretty simple. We one `

` element and three custom `` components inside a `
`. +So far, JSX code is pretty simple - we have one `

` element and three custom `` components inside a `
`. + +> Our `Journal` component wraps multiple `` components and an `

` element inside a single `
` to satisfy an important rule in React - all components are required to return a single root element. -> React has one important rule - components are allowed to return only one element. In this case, our `Journal` component returns multiple `` components, so we must wrap them in a `
`. So technically, component returns one `
` element. +> Difference between 'element' and 'component' is simple: React elements are JavaScript copies of `
`, `

`, `

`, and other HTML elements we know and love. Elements are readily available in JSX and don't need to be defined. On the other hand, components are manually created (or imported) pieces of UI. -But reusable components are not really useful if we can not customize their contents. +Finally, let's see how to pass string values to ``, so every instance displays different text instead of the same 'lorem ipsum' text they have now. ## Customize components -Props are somewhat similar to attributes in HTML. We will explore them in detail later. In HTML, we could set attributes to customize HTML elements to some degree. React feature called **props** is somewhat similar, except it allows us to customize React components' contents, appearance, functionality, and much more. It is the absolute necessity for actually reusing the components +Props are key to component reusability in React. In a way, passing props to a component is like passing arguments to a function. You can pass any type or number of JavaScript values via props, and use those values to customize the content, appearance, functionality, and other aspects of the component. + +The syntax for setting props in React is similar to setting attributes in HTML. + +```javascript +function Journal() { + return ( +

+

Journal

+ + + +
+ ); +} +``` + +In this example, `` components receive string values via `text` prop. You are free to name props anything you want, but it's a good practice to choose descriptive names for props. + +Now, let's modify the `` component itself to use the string value passed to it via `text` prop. + +```javascript +function Entry(props) { + return ( +
+

{props.text}

+
+ ); +} +``` -The problem now, is that all entry components are the same. We need some way to pass them strings, so they display different texts. +Function components receive props as an argument. In this case, `props` is a JavaScript object with property-value pairs to represent each prop. +> React community has created libraries of ready-to-use components you can borrow and customize for your use-cases only by setting different props. to implement advanced features without having to write any of the code. Simply use props to control contents, appearance, functionality, and other aspects of these components. ## Final words From c17517c26bdfa190038de855e96430ee89a32624 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sat, 7 Oct 2023 14:46:28 +0400 Subject: [PATCH 34/41] Update post.md small fix --- day-03/post.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/day-03/post.md b/day-03/post.md index 0843843d..b3cd11cd 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -90,7 +90,7 @@ So far, JSX code is pretty simple - we have one `

` element and three custom > Difference between 'element' and 'component' is simple: React elements are JavaScript copies of `
`, `

`, `

`, and other HTML elements we know and love. Elements are readily available in JSX and don't need to be defined. On the other hand, components are manually created (or imported) pieces of UI. -Finally, let's see how to pass string values to ``, so every instance displays different text instead of the same 'lorem ipsum' text they have now. +Finally, let's see how to pass string values to ``, so every instance displays different text instead of the static text they have now. ## Customize components From c197683eff233d4cb578e293d88e68d239c59068 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sun, 8 Oct 2023 00:19:40 +0400 Subject: [PATCH 35/41] Update post.md changes --- day-03/post.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/day-03/post.md b/day-03/post.md index b3cd11cd..a88be7cb 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -16,7 +16,7 @@ imagesDir: /assets/images/series/30-days-of-react/day-3 includeFile: ./../_params.yaml --- -Today we will discuss components, UI building blocks in React. By the end, hopefully you will have learned how to build and design excellent React components and the benefits of doing so. +Today we will discuss components, UI building blocks in React. You will also learn best practices for building reusable components. Let's revisit the example from day one. @@ -50,9 +50,9 @@ Posts can have different content and authors, but their overall structure is alw So far, our app has one `

` element that says 'Hello World'. -Let's change header text to say 'Journal' and create new component for entries in the journal. +Let's change header text to say 'Journal' and create new component to render journal entries. -For now, let's keep `Entry` components simple. A simple `

` paragraph in a `

` container will be fine. +For now, let's keep `Entry` components simple. A simple `

` paragraph in a `

` container will suffice. ```javascript function Entry() { @@ -65,9 +65,10 @@ function Entry() { ); } ``` + We added lorem ipsum text as an example. -You can invoke custom React components by their name. JSX is great because it allows us to compose elements and components the same way we build layouts in HTML. +JSX allows you to invoke custom React components by their name, the same way you invoke elements in HTML. You can also compose elements and components the same way we build layouts in HTML. Let's say our journal has three entries: @@ -86,9 +87,9 @@ export default function Journal() { So far, JSX code is pretty simple - we have one `

` element and three custom `` components inside a `
`. -> Our `Journal` component wraps multiple `` components and an `

` element inside a single `
` to satisfy an important rule in React - all components are required to return a single root element. +> Our `Journal` component wraps multiple components (and one element) with a `
` to satisfy one of the most important rules in React - all components must return one root element. -> Difference between 'element' and 'component' is simple: React elements are JavaScript copies of `
`, `

`, `

`, and other HTML elements we know and love. Elements are readily available in JSX and don't need to be defined. On the other hand, components are manually created (or imported) pieces of UI. +> To understand difference between elements and components: React **elements** are JavaScript copies of `

`, `

`, `

`, and other HTML elements we know and love. Elements are readily available in JSX and don't need to be defined. On the other hand, components are manually created (or imported) pieces of UI. Finally, let's see how to pass string values to ``, so every instance displays different text instead of the static text they have now. From 89baff6e8473edc7255c5a3980aaedae70164feb Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sun, 8 Oct 2023 00:38:55 +0400 Subject: [PATCH 36/41] Update post.md changes --- day-03/post.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/day-03/post.md b/day-03/post.md index a88be7cb..d59f171c 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -126,7 +126,15 @@ function Entry(props) { } ``` -Function components receive props as an argument. In this case, `props` is a JavaScript object with property-value pairs to represent each prop. +As you can see, the function component accepts `props` as an argument. `props` is a JavaScript object with property-value pairs to represent in each prop. + +For now, our `props` object will have one `text` property with corresponding string value set in the parent component. + +Finally, let's make changes to JSX, so our `` component displays text passed to it via props. + +The string value can be accessed on +we need to configure the `` component to display string passed to it via `props`. `props.text` +So if you want the one components receive props as an argument. `props` is a JavaScript object with property-value pairs to represent each prop. > React community has created libraries of ready-to-use components you can borrow and customize for your use-cases only by setting different props. to implement advanced features without having to write any of the code. Simply use props to control contents, appearance, functionality, and other aspects of these components. From 8ae33e5e4acd724c233c1fa3877ee1b9ba1de3a2 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sun, 8 Oct 2023 00:57:47 +0400 Subject: [PATCH 37/41] Update post.md final --- day-03/post.md | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/day-03/post.md b/day-03/post.md index d59f171c..fb74a40c 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -112,9 +112,9 @@ function Journal() { } ``` -In this example, `` components receive string values via `text` prop. You are free to name props anything you want, but it's a good practice to choose descriptive names for props. +In this example, `` components receive string values via `text` prop. You are free to name props anything you want, but it's a good practice to choose descriptive names. -Now, let's modify the `` component itself to use the string value passed to it via `text` prop. +Now, let's make changes to the JSX of `` component, so entries display the string value passed to them via `text` prop. ```javascript function Entry(props) { @@ -126,21 +126,18 @@ function Entry(props) { } ``` -As you can see, the function component accepts `props` as an argument. `props` is a JavaScript object with property-value pairs to represent in each prop. +The function component accepts argument `props`, which is a JavaScript object where property-value pairs represent individual props. -For now, our `props` object will have one `text` property with corresponding string value set in the parent component. +In this case, our `props` object will have one `text` property. Its value will be equal to the string passed to a specific component via props. -Finally, let's make changes to JSX, so our `` component displays text passed to it via props. +In our case, three instances of `` components receive three different strings via `text` prop. -The string value can be accessed on -we need to configure the `` component to display string passed to it via `props`. `props.text` -So if you want the one components receive props as an argument. `props` is a JavaScript object with property-value pairs to represent each prop. +Finally, it's time to change the contents of `

` paragraph, so individual components display the string passed to them via props. -> React community has created libraries of ready-to-use components you can borrow and customize for your use-cases only by setting different props. to implement advanced features without having to write any of the code. Simply use props to control contents, appearance, functionality, and other aspects of these components. +> Curly braces allow you to embed JavaScript expressions in JSX. +In this case, we use curly braces to replace dynamic text with the string value of `text` property in `props` object. ## Final words -Our React web application got a bit smarter, but we are not even close to utilizing true potential of React. Soon, we'll see how to make React components data-driven and dynamic. - -In the next installment of this series, we'll explore how to actually compose and nest components, and build component trees that make up React web applications. +Today's lesson was a step in the right direction, but we have barely scratched the surface of understanding true potential of React. Let's continue learning about dynamic features of React. From 4bac4f5465e2fed3e684de76d3f617f9634c96a4 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sun, 8 Oct 2023 15:23:27 +0400 Subject: [PATCH 38/41] Update post.md intro to props --- day-03/post.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/day-03/post.md b/day-03/post.md index fb74a40c..0caaa46d 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -38,7 +38,7 @@ Let's start with reusable components. On day 1, we stated that at the heart of all React applications are _components_, reusable fragments of UI. -Component reusability is like using JavaScript functions to avoid writing the same lines of code. It saves us time and makes the UI consistent throughout the web application. +Component reusability is like using JavaScript functions to avoid writing the same lines of code. It saves us time and ensures the UI is consistent throughout the web application. Let's say you are developing a social media app and need to create a `` component. @@ -50,9 +50,9 @@ Posts can have different content and authors, but their overall structure is alw So far, our app has one `

` element that says 'Hello World'. -Let's change header text to say 'Journal' and create new component to render journal entries. +Let's change header text to say 'Journal' and create an `` component to render journal entries. -For now, let's keep `Entry` components simple. A simple `

` paragraph in a `

` container will suffice. +For now, let's create a simple layout, with paragraph text (`

` element) inside a `

`. ```javascript function Entry() { @@ -66,9 +66,7 @@ function Entry() { } ``` -We added lorem ipsum text as an example. - -JSX allows you to invoke custom React components by their name, the same way you invoke elements in HTML. You can also compose elements and components the same way we build layouts in HTML. +In JSX, you can invoke custom React components by their name, the same way you invoke elements in HTML. You can also compose elements and components the same way you build layouts in HTML. Let's say our journal has three entries: @@ -87,15 +85,17 @@ export default function Journal() { So far, JSX code is pretty simple - we have one `

` element and three custom `` components inside a `
`. -> Our `Journal` component wraps multiple components (and one element) with a `
` to satisfy one of the most important rules in React - all components must return one root element. +> Our `Journal` component wraps multiple components (and one element) with a `
` to satisfy an important rule in React - all components must return one root element. -> To understand difference between elements and components: React **elements** are JavaScript copies of `
`, `

`, `

`, and other HTML elements we know and love. Elements are readily available in JSX and don't need to be defined. On the other hand, components are manually created (or imported) pieces of UI. +> React **elements** are JavaScript copies of `

`, `

`, `

`, and other HTML elements we know and love. Elements are readily available in JSX and don't need to be defined. On the other hand, React **components** are manually created (or imported) pieces of UI. -Finally, let's see how to pass string values to ``, so every instance displays different text instead of the static text they have now. +Finally, let's see how to pass string values to ``, so every instance displays different text instead of the static lorem ipsum text they have now. ## Customize components -Props are key to component reusability in React. In a way, passing props to a component is like passing arguments to a function. You can pass any type or number of JavaScript values via props, and use those values to customize the content, appearance, functionality, and other aspects of the component. +Component reusability in React is only possible because of props, a feature that allows you to pass data into components. + +Using props to pass data to a component is like passing arguments to a function. You can pass any type or number of JavaScript values via props, and use those values to customize the content, appearance, functionality, and other aspects of the component. The syntax for setting props in React is similar to setting attributes in HTML. From c5f20d8741e69891120412d356fc06dcedb3d9a9 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sun, 8 Oct 2023 16:25:58 +0400 Subject: [PATCH 39/41] Update post.md final --- day-03/post.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/day-03/post.md b/day-03/post.md index 0caaa46d..4ffa1165 100644 --- a/day-03/post.md +++ b/day-03/post.md @@ -93,9 +93,9 @@ Finally, let's see how to pass string values to ``, so every instance dis ## Customize components -Component reusability in React is only possible because of props, a feature that allows you to pass data into components. +Component reusability is only possible with props, a feature that allows you to pass data into components. -Using props to pass data to a component is like passing arguments to a function. You can pass any type or number of JavaScript values via props, and use those values to customize the content, appearance, functionality, and other aspects of the component. +Like arguments for JavaScript functions, props allow React components to accept data and use it to customize the content, appearance, functionality, and other aspects of the component. The syntax for setting props in React is similar to setting attributes in HTML. @@ -132,12 +132,12 @@ In this case, our `props` object will have one `text` property. Its value will b In our case, three instances of `` components receive three different strings via `text` prop. -Finally, it's time to change the contents of `

` paragraph, so individual components display the string passed to them via props. +Finally, you need to change the contents of `

` paragraph, so individual entries display the string passed to them via props. > Curly braces allow you to embed JavaScript expressions in JSX. -In this case, we use curly braces to replace dynamic text with the string value of `text` property in `props` object. +In the example above, we used curly braces to use string value of `props.text` instead of static lorem ipsum text. ## Final words -Today's lesson was a step in the right direction, but we have barely scratched the surface of understanding true potential of React. Let's continue learning about dynamic features of React. +We have barely scratched the surface of understanding true potential of the library. Let's continue learning about dynamic features of React. From 196908d6fe1ebf5bc65fe9a7eae752de1593e440 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sun, 8 Oct 2023 16:44:23 +0400 Subject: [PATCH 40/41] Update post.md update --- day-04/post.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/day-04/post.md b/day-04/post.md index 63f4dfe8..8ffd8c64 100644 --- a/day-04/post.md +++ b/day-04/post.md @@ -16,7 +16,7 @@ imagesDir: /assets/images/series/30-days-of-react/day-4 includeFile: ./../_params.yaml --- -In the previous section of _30 Days of React_, we started building our first React component. In this section, we'll continue our work with our `App` component and start building a more complex UI. +On day 3 of _30 Days of React_, we built our first reusable React component. Let's continue working with our `Journal` component and implementing dynamic features with React. A common web element we might see is a user timeline. For instance, we might have an application that shows a history of events happening such as applications like Facebook and Twitter. From 43f32f564d4596e6803114ff81afd16dc870edb7 Mon Sep 17 00:00:00 2001 From: Irakli Tchigladze Date: Sun, 8 Oct 2023 22:52:07 +0400 Subject: [PATCH 41/41] Update post.md initial update --- day-04/post.md | 136 +++++++++++-------------------------------------- 1 file changed, 30 insertions(+), 106 deletions(-) diff --git a/day-04/post.md b/day-04/post.md index 8ffd8c64..7aecaae1 100644 --- a/day-04/post.md +++ b/day-04/post.md @@ -18,127 +18,51 @@ includeFile: ./../_params.yaml On day 3 of _30 Days of React_, we built our first reusable React component. Let's continue working with our `Journal` component and implementing dynamic features with React. -A common web element we might see is a user timeline. For instance, we might have an application that shows a history of events happening such as applications like Facebook and Twitter. +One of the most common features is to have a timeline, or some type of user activity feed. + +In our case, that might be a feed of user-submitted entries in the journal. > ## Styles > -> As we're not focusing on [CSS](https://www.w3.org/standards/webdesign/htmlcss) in this course, we're not covering the CSS specific to build the timeline as you see it on the screen. -> -> However, we want to make sure the timeline you build looks similar to ours. If you include the following CSS as a `` tag in your code, your timeline will look similar and will be using the same styling ours is using: +> This course is focused on React, but our web application still needs some CSS styles. We won't walk you through CSS styles, but check out `styles.css` file if you want to learn more about specific styles applied to our React app. > -> ```html -> href="https://cdn.jsdelivr.net/gh/fullstackreact/30-days-of-react@master/day-04/public/Timeline.css" -> rel="stylesheet" -> type="text/css" -> /> -> ``` +> Also make sure to set appropriate `className` values to make sure elements look as they should. > -> And make sure to surround your code in a component with the class of `demo` (we left it this way purposefully as it's the _exact_ same code we use in all the demos here). Check out the [https://jsfiddle.net/auser/zwomnfwk/](https://jsfiddle.net/auser/zwomnfwk/) for a working example. +> We might also use additional libraries that provide pre-defined classes and fonts like font-awesome. > -> The entire compiled CSS can be found on the github repository at [https://github.com/fullstackreact/30-days-of-react/blob/master/day-04/public/Timeline.css](https://github.com/fullstackreact/30-days-of-react/blob/master/day-04/public/Timeline.css). -> -> In addition, in order to make the timeline look _exactly_ like the way ours does on the site, you'll need to include [font-awesome](http://fontawesome.io/) in your web application. There are multiple ways to handle this. The simplest way is to include the link styles: -> -> ```html -> href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" -> rel="stylesheet" -> type="text/css" -> /> -> ``` -> -> _All_ the code for the examples on the page is available at the [github repo (at https://github.com/fullstackreact/30-days-of-react)](https://github.com/fullstackreact/30-days-of-react). +> The list of installed packages will be listed on bottom-left corner in CodeSandbox. -We _could_ build this entire UI in a single component. However, building an entire application in a single component is not a great idea as it can grow huge, complex, and difficult to test. +Hopefully by now you see the value of reusable components - that they save time on web development, and make debugging much easier. +Let's revisit latest example from our app: -```html -class Timeline extends React.Component { - render() { - return ( -

-
-
- -
-
-
-
-
- - Timeline - - - -
-
-
-
-
- -
- doug -
- - - An hour ago - -

Ate lunch

-
- -
-
- doug -
- - 10 am -

Read Day two article

-
- -
-
- doug -
- - 10 am -

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

-
- -
-
- doug -
- - 2:21 pm -

Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.

-
+```javascript +function Journal() { + return ( +
+

Journal

+ + + +
+ ); +} -
-
-
- ) - } +function Entry(props) { + return ( +
+

{props.text}

+
+ ); } ``` -
- -## Breaking it down +Let's try to improve the header, make it look better as well as add few basic features. -Rather than build this in a single component, let's break it down into multiple components. +To do this, we will have to create a separate `
` component. -Looking at this component, there are 2 separate parts to the larger component as a whole: +Let's also create a `` component to store entries of the journal. -1. The title bar -2. The content +So our parent `Journal` will render two components, `
` and ``.