Single-page applications, or SPAs, have reshaped the way users experience websites by making them faster and more interactive. With just one page loading initially, SPAs dynamically update the content, creating the feel of a smooth, app-like experience. React, a leading JavaScript library developed by Facebook has become a go-to tool for building SPAs due to its component-based approach and efficient virtual DOM.

In this guide, we’ll walk through building a basic SPA with React. By the end, you’ll have a functional app with multiple pages, all handled on the front end, without a single page reload.


What is a Single-Page Application?

A single-page application is a web app that loads a single HTML page and dynamically updates content as users interact with the app. Unlike traditional multi-page applications that request a new HTML file from the server each time you navigate, SPAs only load content when needed, improving load times and creating a smoother user experience.

In practice, SPAs are particularly popular for web applications where interactivity and fast response times are priorities. By using technologies like JavaScript and React, SPAs can deliver a seamless user experience by updating just the parts of the page that need to change.


Why Choose React for SPAs?

React’s flexibility, efficiency, and community support make it a fantastic choice for building SPAs. Here’s a breakdown of why it’s well-suited for this purpose:

  • Component-Based Architecture: React allows developers to build UI elements as reusable components, making code organization cleaner and more scalable.
  • Virtual DOM: React’s virtual DOM ensures that only the parts of the UI that need updating are re-rendered, leading to better performance.
  • Easy Integration: React works well alongside other libraries, so you can bring in only what you need.

While other libraries and frameworks (like Vue and Angular) also support SPA development, React’s simplicity and modular approach often make it a favorite.


Setting Up the React Development Environment

Before jumping in, ensure you have Node.js and npm installed on your machine. Node allows you to run JavaScript on your local machine, and npm is the package manager you’ll use to install React and other dependencies.

  1. Install Node and npm: If you haven’t done so already, download and install Node.js from nodejs.org.
  2. Create a React App: Open your terminal, navigate to a folder where you’d like to set up your project and run: npx create-react-app my-spa This command creates a new folder named my-spa with all the necessary files for a React app.
  3. Explore the Folder Structure: Inside your project folder, you’ll find files like index.js and App.js in the src directory. These are the main files you’ll work with to structure and run your SPA.

Building a Basic SPA Example

The beauty of React is in its reusability. Let’s start by creating two simple components: a header and a footer. Inside the src folder, create a components folder, then add two files: Header.js and Footer.js.

Header.js:

import React from 'react';

function Header() {
return <header><h1>My React SPA</h1></header>;
}

export default Header;

Footer.js:

import React from 'react';

function Footer() {
return <footer><p>© 2024 My React SPA</p></footer>;
}

export default Footer;

In your App.js, import these components and include them in your app’s main layout.

import Header from './components/Header';
import Footer from './components/Footer';
import './App.css';

function App() {
  return (
    <div className="App">
      <Header />
      <Footer />
    </div>
  );
}

export default App;

Step 2: Set Up Routing with React Router

To turn this project into a multi-page app without reloading, we’ll use react-router-dom for routing.

  1. Install React Router: npm install react-router-dom
  2. Set Up Routes: In App.js, wrap your content with BrowserRouter, and define Route components for each page.

Example in App.js:

import { BrowserRouter as Router, Route, Routes, Link } from 'react-router-dom';
import Header from './components/Header';
import Footer from './components/Footer';
import Home from './pages/Home';
import About from './pages/About';
import './App.css';

function App() {
return (
<Router>
<div className="App">
<Header />
<nav>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
</ul>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
<Footer />
</div>
</Router>
);
}

export default App;

This structure lets us navigate between the Home and About pages without reloading the entire page. Since we haven’t created the Home.js and About.js files, we’ll get an error, let’s jump to the next section to address that.

Step 3: Create Page Components

Now, let’s add some simple content for each route. In the src folder, create a pages folder and add Home.js and About.js.

Home.js:

import React from 'react';

function Home() {
return <div><h2>Welcome to the Home Page</h2></div>;
}

export default Home;

About.js:

import React from 'react';

function About() {
return <div><h2>About This App</h2></div>;
}

export default About;

Adding a Basic State with Hooks

React’s Hooks make managing state easy. Let’s add a simple state example in Home.js that tracks a counter.

import React, { useState } from 'react';

function Home() {
const [count, setCount] = useState(0);

return (
<div>
<h2>Welcome to the Home Page</h2>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increase Count</button>
</div>
);
}

export default Home;

The useState hook creates a piece of state (count) and a function to update it (setCount), giving the app some interactivity.


Styling Your SPA

You can use regular CSS, a CSS-in-JS library, or a CSS framework like Bootstrap or Tailwind CSS for styling. For simplicity, let’s add some inline styles in our components, or you can create a CSS file and import it.


Testing and Debugging Your SPA

Testing is essential for building reliable applications. You can add simple unit tests using Jest, which comes bundled with Create React App, or use React Testing Library for component tests. And for debugging, the React Developer Tools extension is incredibly helpful for inspecting component state and props.


Deploying Your SPA

Finally, once your app is ready, it’s time to share it with the world. Platforms like GitHub Pages, Vercel, and Netlify make deployment simple. For GitHub Pages, you can set up your project with:

npm run build

Then, follow GitHub’s steps to publish it online.


Wrapping Up

In this guide, we walked through creating a basic React SPA from scratch, covering essential topics like routing, state management, and deployment. While this app is simple, the possibilities with React are vast—so don’t hesitate to experiment with new components, features, or styling frameworks as you continue your journey.

Ready to take your application to the next level?

Building scalable, high-performance web applications requires the right expertise. At Curotec, our team specializes in building custom software solutions tailored to your business needs. From front-end React SPAs to full-scale enterprise applications, we bring years of experience and a passion for innovation to every project.

Get in touch with Curotec today to discuss how we can help bring your next digital project to life!