Building a Chat App with React and Socket.IO

In today’s digital age, chat applications are an essential part of our communication channels. From businesses to individuals, everyone needs a platform to connect with each other instantly. React and Socket.IO are two popular technologies that can be used to build real-time chat applications. In this article, we will discuss how to build a chat app with React and Socket.IO.

What is Socket.IO?

Socket.IO is a library that enables real-time, bidirectional, and event-based communication between web clients and servers. It uses WebSockets, a protocol for full-duplex communication channels over a single TCP connection. Socket.IO provides a simple API to send and receive messages in real-time, making it an ideal technology for building chat applications.

Building a Chat App with React and Socket.IO

To build a chat app with React and Socket.IO, we need to follow these steps:

Set up the Backend

The first step is to set up the backend server with Socket.IO. We can use Node.js and Express.js to create the backend server. We also need to install the Socket.IO library using npm.

npm install

Once we have installed the library, we can create the backend server and initialize Socket.IO.

const express = require('express');
const http = require('http');
const socketIO = require('');

const app = express();
const server = http.createServer(app);
const io = socketIO(server);

io.on('connection', (socket) => {
  console.log('A user connected');

server.listen(3000, () => {
  console.log('Server is running on port 3000');

This code sets up a server on port 3000 and initializes Socket.IO. The io.on('connection') method listens for a connection event and logs a message to the console when a user connects.

Set up the Frontend

The next step is to set up the frontend with React. We can create a new React project using create-react-app.

npx create-react-app chat-app

Once we have created the project, we can install the Socket.IO client library.

npm install

After installing the library, we can create a Chat component that will handle the chat functionality. We will use React hooks to handle the state and Socket.IO client library to communicate with the backend server.

import React, { useState, useEffect } from 'react';
import io from '';

const socket = io('http://localhost:3000');

function Chat() {
  const [messages, setMessages] = useState([]);
  const [message, setMessage] = useState('');

  useEffect(() => {
    socket.on('message', (data) => {
      setMessages([...messages, data]);
  }, [messages]);

  const sendMessage = (event) => {
    socket.emit('message', message);

  return (
      { => (
        <p key={message}>{message}</p>
      <form onSubmit={sendMessage}>
        <input value={message} onChange={(event) => setMessage(} />
        <button type="submit">Send</button>

export default Chat;

This code creates a Chat component that handles the state of the chat messages and sends and receives messages from the backend server. The useEffect hook listens for a message event from the backend server and updates the state with the new message. The sendMessage function emits a message event to the backend server and clears the input field.

Test the Chat

Now that we have set up the backend and frontend, we can test the chat application. Start the backend server by running node index.js in the terminal. Then, start the React app by running npm start in another terminal window. The chat app will open in the browser.

Open multiple instances of the chat app in different browser windows or tabs to simulate multiple users. Start chatting by typing messages in the input field and clicking the send button. The messages will appear in real-time on all instances of the chat app.


In this article, we have learned how to build a chat app with React and Socket.IO. Socket.IO provides a simple API to send and receive messages in real-time, making it an ideal technology for building chat applications. By following the steps outlined in this article, you can easily create your own chat application and customize it to meet your specific needs.