Building a Real-Time Chat App with Socket.io and React

Introduction:

Real-time chat applications are becoming increasingly popular, and with the rise of Socket.io and React, it has never been easier to build them. In this tutorial, we will show you how to build a real-time chat application using Socket.io and React.

Socket.io is a JavaScript library that enables real-time, bi-directional communication between web clients and servers. It is designed to be simple and easy to use, and it is widely used in web applications to provide real-time functionality.

React is a JavaScript library for building user interfaces. It is designed to be simple and efficient, and it is widely used in web applications to build interactive and responsive user interfaces.

By combining these two technologies, we will be able to create a chat app that can handle multiple users and messages being sent in real-time.

Setting up the server:

The first step in building our chat app is to set up the server. We will be using Node.js and Express to create the server.

First, create a new Node.js project and install the following dependencies:

  • Express

  • Socket.io

Next, create an index.js file and add the following code:

Y29uc3QgZXhwcmVzcyA9IHJlcXVpcmUoJ2V4cHJlc3MnKTsKY29uc3Qgc29ja2V0aW8gPSByZXF1aXJlKCdzb2NrZXQuaW8nKTsKCmNvbnN0IGFwcCA9IGV4cHJlc3MoKTsKY29uc3Qgc2VydmVyID0gYXBwLmxpc3RlbigzMDAwLCAoKSA9PiBjb25zb2xlLmxvZygnU2VydmVyIGxpc3RlbmluZyBvbiBwb3J0IDMwMDAnKSk7Cgpjb25zdCBpbyA9IHNvY2tldGlvKHNlcnZlcik7Cgppby5vbignY29ubmVjdGlvbicsIChzb2NrZXQpID0+IHsKICBjb25zb2xlLmxvZygnQSB1c2VyIGNvbm5lY3RlZCcpOwoKICBzb2NrZXQub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7CiAgICBjb25zb2xlLmxvZygnQSB1c2VyIGRpc2Nvbm5lY3RlZCcpOwogIH0pOwp9KTsK

This code creates an Express server and sets up Socket.io to listen for connections. When a user connects to the server, the connection event is fired and we log a message to the console. When a user disconnects, the disconnect event is fired and we log a message to the console.

Setting up the client:

We will be using React to create the user interface for our chat app.

First, create a new React project and install the following dependencies:

  • Socket.io-client

Next, create a Chat component that will hold the chat interface. Add the following code to the Chat component:

AW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7CmltcG9ydCBpbyBmcm9tICdzb2NrZXQuaW8tY2xpZW50JzsKCmNvbnN0IENoYXQgPSAoKSA9PiB7CiAgY29uc3QgW21lc3NhZ2VzLCBzZXRNZXNzYWdlc10gPSB1c2VTdGF0ZShbXSk7CiAgY29uc3QgW25ld01lc3NhZ2UsIHNldE5ld01lc3NhZ2VdID0gdXNlU3RhdGUoJycpOwoKICB1c2VFZmZlY3QoKCkgPT4gewogICAgY29uc3Qgc29ja2V0ID0gaW8oJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcpOwoKICAgIHNvY2tldC5vbignbWVzc2FnZScsIChtZXNzYWdlKSA9PiB7CiAgICAgIHNldE1lc3NhZ2VzKFsuLi5tZXNzYWdlcywgbWVzc2FnZV0pOwogICAgfSk7CgogICAgcmV0dXJuICgpID0+IHsKICAgICAgc29ja2V0LmRpc2Nvbm5lY3QoKTsKICAgIH07CiAgfSwgW21lc3NhZ2VzXSk7CgogIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChldmVudCkgPT4gewogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIGlmICghbmV3TWVzc2FnZSkgcmV0dXJuOwogICAgc29ja2V0LmVtaXQoJ21lc3NhZ2UnLCBuZXdNZXNzYWdlKTsKICAgIHNldE5ld01lc3NhZ2UoJycpOwogIH07CgogIHJldHVybiAoCiAgICA8ZGl2PgogICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT4KICAgICAgICA8aW5wdXQgdmFsdWU9e25ld01lc3NhZ2V9IG9uQ2hhbmdlPXsoZXZlbnQpID0+IHNldE5ld01lc3NhZ2UoZXZlbnQudGFyZ2V0LnZhbHVlKX0gLz4KICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCI+U2VuZDwvYnV0dG9uPgogICAgICA8L2Zvcm0+CiAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiAoCiAgICAgICAgPHAga2V5PXtpbmRleH0+e21lc3NhZ2V9PC9wPgogICAgICApKX0KICAgIDwvZGl2PgogICk7Cn07CgpleHBvcnQgZGVmYXVsdCBDaGF0Ow==

This code creates a Chat component that renders a form for sending messages and a list of messages. The component uses the useState hook to store the messages and the current message being typed in the form. The useEffect hook is used to set up a Socket.io connection to the server and listen for incoming messages. The handleSubmit function is called when the form is submitted, and it sends the current message to the server using Socket.io and clears the input field. The list of messages is rendered using the map function.

Want us to build yours instead?

On a project, every milestone ends with a link to the working build, and the code, the accounts and every password are yours at the handover.

What we’d build for you is on Services.

Send us the brief, or start with the free call.

Page updated .

Privacy preferences

Choose whether this browser sends visit data to our analytics tools. The site works the same either way.

Google Analytics, Amplitude and Microsoft Clarity show us which pages get read. Off means none of the three loads.

Always on

Sentry error reports, with personal data removed, and the Cloudflare spam check on the brief form.

Each cookie is listed in our Cookie Policy.