In this section, we are going to learn the basics of JavaScript and then we will move forward to React. And at the end, we will be doing out main Project Installation Part.
JavaScript
JavaScript is the world's most popular programming language.
JavaScript is the programming language of the Web.
Why Study JavaScript?
JavaScript is one of the 3 languages all web developers must learn:
- HTML to define the content of web pages
- CSS to specify the layout of web pages
- JavaScript to program the behavior of web pages
JavaScript Can Change HTML Content
One of many JavaScript HTML methods is getElementById().
The example below "finds" an HTML element (with id="demo"), and changes the element content (innerHTML) to "Hello World":
<!DOCTYPE html>
<html>
<body>
<h2>What Can JavaScript Do?</h2>
<p id="demo">JavaScript can change HTML content.</p>
<button type="button" onclick='document.getElementById("demo").innerHTML = "Hello World"'>Click Me!</button>
</body>
</html>
JavaScript Where To
The script Tag
In HTML, JavaScript code is inserted between
<script> and </script> tags.
<script>
document.getElementById("demo").innerHTML = "My First JavaScript";
</script>
JavaScript Functions and Events
A JavaScript function is a block of JavaScript code, that can be executed when "called" for.
For example, a function can be called when an event occurs, like when the user clicks a button.
JavaScript in or
You can place any number of scripts in an HTML document.
Scripts can be placed in the <body>, or in the <head> section of an HTML page, or in both, depending upon the purpose or requirement.
External JavaScript
External scripts are practical when the same code is used in many different web pages.
JavaScript files have the file extension .js.
To use an external script, put the name of the script file in the src (source) attribute of a <script> tag:
<script src="myScript.js"></script>
JavaScript Output
JavaScript Display Possibilities
JavaScript can "display" data in different ways:
- Writing into an HTML element, using
innerHTML. - Writing into the HTML output using
document.write(). - Writing into an alert box, using
window.alert(). - Writing into the browser console,
using console.log().
JavaScript Keywords
JavaScript statements often start with a keyword to identify the JavaScript action to be performed.
Keyword Description
- var - Declares a variable
- let - Declares a block variable
- const - Declares a block constant
- if - Marks a block of statements to be executed on a -condition
- switch - Marks a block of statements to be executed in different cases
- for - Marks a block of statements to be executed in a loop
- function - Declares a function
- return - Exits a function
- try - Implements error handling to a block of statements
JavaScript Variables
In a programming language, variables are used to store data values.
JavaScript uses the keywords var, let and const to declare variables.
An equal sign is used to assign values to variables.
In this example, x is defined as a variable. Then, x is assigned (given) the value 6:
let x;
x = 6;
Variables and Data Types
JavaScript uses variables to store and manipulate data. Variables are declared using the let or const keyword.
let is used for variables that can be reassigned.
const is used for variables that should not be reassigned.
The let and const keywords were added to JavaScript in 2015.
The var keyword should only be used in code written for older browsers.
let message = "Hello, World!";
const pi = 3.14;
let isTrue = true;
let fruits = ["apple", "orange", "banana"];
let person = { name: "John", age: 30 };
In the example above:
message is a string variable.
pi is a constant representing the mathematical constant Pi.
isTrue is a boolean variable.
fruits is an array containing strings.
person is an object with properties name and age.
JavaScript Const
- Variables defined with
constcannot be Redeclared - Variables defined with
constcannot be Reassigned - Variables defined with
consthave Block Scope
JavaScript has two types of scope:
Global Scope: Variables declared outside of a function are in the global scope and can be accessed throughout the entire program.
Local Scope: Variables declared inside a function are in the local scope and can only be accessed within that function.
JavaScript Data Types
JavaScript has 8 Datatypes
- String
- Number
- Bigint
- Boolean
- Undefined
- Null
- Symbol
- Object
The Object Datatype
The object data type can contain:
- An object
- An array
- A date
JavaScript Functions
A JavaScript function is a block of code designed to perform a particular task.
A JavaScript function is executed when "something" invokes it (calls it).
function greet(name) {
let greeting = "Hello, " + name + "!";
return greeting;
}
console.log(greet("TDoC")); // Output: Hello, TDoC!
In this example, greet is a function that takes a parameter name and returns a greeting.
JavaScript Function Syntax
A JavaScript function is defined with the function keyword, followed by a name, followed by parentheses ().
The code to be executed, by the function, is placed inside curly brackets: {}
function name(parameter1, parameter2, parameter3) {
// code to be executed
}
- Function parameters are listed inside the parentheses () in the function definition.
- Function arguments are the values received by the function when it is invoked.
- Inside the function, the arguments (the parameters) behave as local variables.
Function Invocation
The code inside the function will execute when "something" invokes (calls) the function:
- When an event occurs (when a user clicks a button)
- When it is invoked (called) from JavaScript code
- Automatically (self invoked)
Function Return
- When JavaScript reaches a
returnstatement, the function will stop executing. - If the function was invoked from a statement, JavaScript will "return" to execute the code after the invoking statement.
- Functions often compute a return value. The return value is "returned" back to the "caller":
// Function is called, the return value will end up in x
let x = myFunction(4, 3);
function myFunction(a, b) {
// Function returns the product of a and b
return a * b;
}
Control Flow: Conditional Statements and Loops
JavaScript if, else, and else if
Conditional statements are used to perform different actions based on different conditions.
In JavaScript we have the following conditional statements:
- Use
ifto specify a block of code to be executed, if a specified condition is true - Use
elseto specify a block of code to be executed, if the same condition is false - Use
else ifto specify a new condition to test, if the first condition is false - Use
switchto specify many alternative blocks of code to be executed
JavaScript Loops
Loops can execute a block of code a number of times.
Different Kinds of Loops
JavaScript supports different kinds of loops:
-
for- loops through a block of code a number of times -
for/in- loops through the properties of an object -
for/of- loops through the values of an iterable object -
while- loops through a block of code while a specified condition is true -
do/while- also loops through a block of code while a specified condition is true
let num = 10;
if (num > 0) {
console.log("Positive number");
} else if (num < 0) {
console.log("Negative number");
} else {
console.log("Zero");
}
Loops, such as for and while, enable repetitive execution of code.
for (let i = 0; i < 5; i++) {
console.log(i);
}
This loop prints the values 0 through 4 to the console.
JavaScript Callbacks
- A callback is a function passed as an argument to another function
- This technique allows a function to call another function
- A callback function can run after another function has finished
Asynchronous Programming
Functions running in parallel with other functions are called asynchronous. JavaScript supports asynchronous programming to handle operations that may take time, like fetching data.
Promises
A Promise is an object representing the eventual completion or failure of an asynchronous operation.
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = "Fetched data";
resolve(data);
}, 1000);
});
}
fetchData().then((result) => {
console.log(result); // Output: Fetched data
});
In this example, fetchData returns a promise. When the data is fetched, the resolve function is called.
Async/Await
- async makes a function return a Promise
- await makes a function wait for a Promise
async function fetchDataAsync() {
try {
const result = await fetchData();
console.log(result); // Output: Fetched data
} catch (error) {
console.error(error);
}
}
fetchDataAsync();
The await keyword is used within an async function to wait for the completion of a promise.
JavaScript EventListener
React
- React is a JavaScript library for building user interfaces.
- React is used to build single-page applications.
- React allows us to create reusable UI components.
You can find the official React Documentation Here
Setting up a React Environment
If you have npx and Node.js installed, you can create a React application by using create-react-app.
Run this command to create a React application named my-react-app:
npx create-react-app my-react-app
The create-react-app will set up everything you need to run a React application.
Run the React Application
Now you are ready to run your first real React application!
Run this command to move to the my-react-app directory:
cd my-react-app
Run this command to run the React application my-react-app:
npm start
A new browser window will pop up with your newly created React App! If not, open your browser and type localhost:3000 in the address bar.
State and Props
State and props are two fundamental concepts in React for managing component-specific data.
State
State is a way for a component to maintain and manage its own data.
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
render() {
return (
<div>
<p>Count: {this.state.count}</p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
Increment
</button>
</div>
);
}
}
In this example, the Counter component maintains its count in the state.
Props
Props are inputs that a React component can receive.
function Greet(props) {
return <p>Hello, {props.name}!</p>;
}
Here, the Greet component receives a name prop.
Functional Components
Functional components are simple JavaScript functions that take in props and return React elements.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
Class Components
Class components are ES6 classes that extend from React.Component.
class WelcomeClass extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
In the above examples, both components display a greeting based on the provided name prop.
React Hooks
React Hooks were introduced to allow functional components to use state and lifecycle features.
useState Hook
- The React
useStateHook allows us to track state in a function component. - State generally refers to data or properties that need to be tracking in an application.
Initialize useState
We initialize our state by calling useState in our function component.
useState accepts an initial state and returns two values:
- The current state.
- A function that updates the state.
Initialize state at the top of the function component.
import { useState } from "react";
function FavoriteColor() {
const [color, setColor] = useState("");
}
Notice that again, we are destructuring the returned values from useState.
- The first value,
color, is our current state. - The second value,
setColor, is the function that is used to update our state. - Lastly, we set the initial state to an empty string:
useState("")
import React, { useState } from "react";
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
Here, the Counter component uses the useState hook to manage the count state.
Let's take an example of how to update a state by useState.
import { useState } from "react";
import ReactDOM from "react-dom/client";
function FavoriteColor() {
const [color, setColor] = useState("red");
return (
<>
<h1>My favorite color is {color}!</h1>
<button
type="button"
onClick={() => setColor("blue")}
>Blue</button>
</>
)
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<FavoriteColor />);
useEffect Hook
- The
useEffectHook allows you to perform side effects in your components. - Some examples of side effects are: fetching data, directly updating the DOM, and timers.
useEffect accepts two arguments. The second argument is optional.
useEffect(<function>, <dependency>)
Let's take an example and understand this.
import React, { useState, useEffect } from "react";
function DataFetcher() {
const [data, setData] = useState(null);
useEffect(() => {
const fetchData = async () => {
try {
const result = await new Promise((resolve) =>
setTimeout(() => resolve("Fetched data"), 1000)
);
setData(result);
} catch (error) {
console.error(error);
}
};
fetchData();
}, []); // Empty dependency array means it runs once after the initial render
return <p>Data: {data}</p>;
}
-
Import Statements:
-
Reactis imported as it's required for JSX. -
useStateanduseEffectare imported from React. These are Hooks used for managing state and performing side effects in functional components.
-
-
Functional Component
DataFetcher:-
DataFetcheris a functional component that fetches and displays data. -
const [data, setData] = useState(null);: This line uses theuseStateHook to create a state variabledatainitialized tonull, and a functionsetDatato update this state.
-
-
useEffectHook:-
useEffectis used to perform side effects in a functional component. It runs after the initial render and can be used for data fetching, subscriptions, or manually changing the DOM.
-
-
fetchDataFunction:-
fetchDatais an asynchronous function that simulates data fetching after a delay of 1000 milliseconds usingsetTimeout.
-
-
try-catchBlock:- The
tryblock attempts to fetch data and sets it usingsetData. - If an error occurs during the data fetching process, it's caught in the
catchblock, and an error message is logged to the console.
- The
-
fetchDataInvocation inuseEffect:- The
fetchDatafunction is invoked inside theuseEffectHook.
- The
-
Dependency Array:
- The dependency array (
[]) is empty, meaning theuseEffectruns once after the initial render. If there were dependencies listed, the effect would run whenever those dependencies change.
- The dependency array (
-
Return Statement:
- The component returns JSX that displays the fetched data inside a
<p>element.
- The component returns JSX that displays the fetched data inside a
In summary, this component fetches data using the useEffect Hook, updates the state with the fetched data, and renders the data in the component. The empty dependency array ensures that the effect runs only once after the initial render.
React Router Dom
React Router Dom is a library for handling navigation in React applications.
To add React Router in your application, run this in the terminal from the root directory of the application:
npm i -D react-router-dom
Let's take another example and understand Router-Dom.
import { BrowserRouter as Router, Route, Link, useParams } from "react-router-dom";
function UserProfile() {
let { username } = useParams();
return <h2>User Profile: {username}</h2>;
}
function App() {
return (
<Router>
<div>
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/user/john">User John</Link>
</li>
</ul>
</nav>
<Route path="/user/:username" component={UserProfile} />
</div>
</Router>
);
}
-
Import Statements:
- The code imports components from the
react-router-domlibrary for setting up routing in a React application. -
BrowserRouter as Router,Route,Link, anduseParamsare imported.
- The code imports components from the
-
Functional Component
UserProfile:-
UserProfileis a functional component that extracts theusernameparameter from the URL using theuseParamshook. - It returns an
<h2>element displaying the user profile based on the extractedusername.
-
-
Functional Component
App:-
Appis a functional component representing the main structure of the application. - It uses the
Routercomponent to define the router context for the application.
-
-
Navigation Setup:
- The
navelement contains an unordered list (ul) with list items (li) representing navigation links. -
Linkcomponents are used for creating navigation links. The links point to different routes, such as the home route ("/") and a user route ("/user/john").
- The
-
Route Definition:
- The
Routecomponent is used to define a route for the user profile. It specifies that when the URL matches the pattern "/user/:username," theUserProfilecomponent should be rendered.
- The
-
Router Context:
- The entire structure is wrapped in the
Routercomponent to establish the router context for the application.
- The entire structure is wrapped in the
In summary, this code sets up basic navigation using react-router-dom. The App component defines routes, and the UserProfile component dynamically displays user profiles based on the username parameter extracted from the URL.
Getting Started with the Project: Project Installation
After the completion of the Project, your minimized project structure should be looking like this:
React Custom Package
We've chosen to create our own special toolkit (SDK) for handling IPFS uploads in our project. This decision is intentional – we're starting to use it right from the beginning. This approach makes things smoother as we progress, ensuring that the toolkit is perfectly suited to our needs for implementing the desired features in later stages of development.
You can find more about ipfs-http-client Here.
You can find more about Helia Here.
thirdweb React SDK
Ultimate collection of React hooks for your web3 apps.
You can find more about this package Here.
Let’s start the project by choosing the right directory where you want to create your project and start with
npx thirdweb create --app
- Then choose create-react-app
- Then choose JavaScript

Top comments (0)