Create a Weather app using React and Tailwind
Last Updated :
25 Jul, 2024
React JS is a very famous library for front-end development. In this article, we will walk through the process of building a weather app using React, a popular JavaScript library for building user interfaces(UI). Here we also use Tailwind CSS, a utility-first CSS framework. Here we also use a weather API to get data from it and then display its data. At the end, we will have a functional weather app that fetches real-time weather data and displays it in a user-friendly front-end.
Prerequisite
Approach:
- State Management:
- Used the
useState
hook to manage two pieces of state:city
: Stores the user-inputted city name.weatherData
: Stores the fetched weather data from the API.
- API Data Fetching:
- Created an asynchronous function
fetchWeatherData
to handle the API call using the fetch
function. - Constructed the API endpoint using the weatherapi.com service, including the API key and the user-inputted city.
- Used a
try-catch
block to handle errors during the API call. - Updated the
weatherData
state with the fetched data if the API call was successful. - Logged the data to the console for debugging purposes.
- User Interface (UI):
- Designed a simple UI using JSX with a flex container for centering content vertically and horizontally.
- Included an input field for users to enter the city name and a button to trigger the weather data fetching.
- Styled the UI elements using Tailwind CSS classes for a clean and responsive design.
- Displaying Weather Information:
- Conditionally rendered a section to display weather information only if
weatherData
is available. - Showed relevant weather details such as location, country, current condition, temperature, "feels like" temperature, and wind information.
- Used Tailwind CSS classes for styling to enhance the visual presentation of the weather information.
Steps to Create a React Application:
Step 1: Create a react application by using this command
npx create-react-app weather-app
Step 2: After creating your project folder, i.e. PalindromeApp, use the following command to navigate to it:
cd weather-app
Step 3: Install Tailwind CSS
By using below command we will Install the required packages for Tailwind CSS
npm install tailwindcss
Now, Let's create the configuration files for tailwindcss
npx tailwindcss init
you will see that there is new file named "tailwind.config.js" created.
Project Structure:
Project StructureThe updated dependencies in package.json file will look like:
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"tailwindcss": "^3.4.0",
"web-vitals": "^2.1.4"
}
Make below changes in this file for configuration of tailwindcss.
// File : tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./src/**/*.{js,jsx,ts,tsx}"],
theme: {
extend: {},
},
plugins: [],
}
Now, Open src/index.css and import Tailwind CSS in that file by adding below code in it.
/* File : Index.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
Step 4: API Response
Here we used weatherapi.com API for getting weather data of different city. so for that you simply need to signup on that API platform, you will get API Key to use in project. then we will hit the url "https://api.weatherapi.com/v1/current.json?key=${API_KEY}&q=${city}" to get a specific city weather data.
as example, here I had searched for current weather data of Noida city. you will get below as response.
Api Response
Here you can see there is different-different weather info available in the response you can use them as per your convenience.
Example: Now, let's create our Weather components in src/App.js. It contains one search box for input of city name, and another box with shows weather of the city.
JavaScript
/* File : src/App.js*/
import React, { useState } from 'react';
import './App.css';
const WeatherApp = () => {
// State to store the city input and weather data
const [city, setCity] = useState('');
const [weatherData, setWeatherData] = useState(null);
// Function to fetch weather data from the weatherapi.com API
const fetchWeatherData = async () => {
// Implement API call to fetch weather data
// using a service of weatherapi.com
// Replace the API_KEY with your actual API key
const API_KEY = 'afe34ae5f71249829d955000232712';
const API_ENDPOINT =
`https://api.weatherapi.com/v1/current.json?key=${API_KEY}&q=${city}`;
try {
// Fetch weather data from the API
const response = await fetch(API_ENDPOINT);
const data = await response.json();
// Update the state with the fetched weather data
setWeatherData(data);
// Log the data to the console (for debugging purposes)
console.log(data);
} catch (error) {
// Handle errors in fetching weather data
console.error('Error fetching weather data:', error);
}
};
// JSX structure for the Weather App component
return (
<div className="h-screen flex flex-col
items-center justify-center bg-green-400">
<div className="bg-white p-8 rounded shadow-md mb-4">
<h2 className="text-2xl font-bold mb-4">
Weather App
</h2>
{/* Input field for entering the city name */}
<input
type="text"
placeholder="Enter city name"
className="border p-2 w-full mb-4"
value={city}
onChange={(e) => setCity(e.target.value)} />
{/* Button to trigger fetching weather data */}
<button
className="bg-green-400 text-white p-2 rounded"
onClick={fetchWeatherData}>
Get Weather
</button>
</div>
{/* Display weather information if data is available */}
{weatherData && (
<div className="bg-white p-8 rounded shadow-md">
<div className="mt-4">
{/* Display location and country */}
<h3 className="text-xl font-semibold mb-2">
Weather in {weatherData.location.name},
{weatherData.location.country}
</h3>
{/* Display current weather conditions */}
<p>
Condition:
{weatherData.current.condition.text}
</p>
{/* Display current temperature */}
<p>
Temperature:
{weatherData.current.temp_c}°C
</p>
{/* Display "feels like" temperature */}
<p>
Feels Like:
{weatherData.current.feelslike_c}°C
</p>
{/* Display wind information */}
<p>
Wind: {weatherData.current.wind_kph}
KMH in {weatherData.current.wind_dir} Direction
</p>
</div>
</div>
)}
</div>
);
};
export default WeatherApp;
Step to run the Application:
we can simply run our React app by using command npm start. you will able to see below as output.
npm start
Output:
Similar Reads
Non-linear Components In electrical circuits, Non-linear Components are electronic devices that need an external power source to operate actively. Non-Linear Components are those that are changed with respect to the voltage and current. Elements that do not follow ohm's law are called Non-linear Components. Non-linear Co
11 min read
JavaScript Tutorial JavaScript is a programming language used to create dynamic content for websites. It is a lightweight, cross-platform, and single-threaded programming language. It's an interpreted language that executes code line by line, providing more flexibility.JavaScript on Client Side: On the client side, Jav
11 min read
Web Development Web development is the process of creating, building, and maintaining websites and web applications. It involves everything from web design to programming and database management. Web development is generally divided into three core areas: Frontend Development, Backend Development, and Full Stack De
5 min read
Spring Boot Tutorial Spring Boot is a Java framework that makes it easier to create and run Java applications. It simplifies the configuration and setup process, allowing developers to focus more on writing code for their applications. This Spring Boot Tutorial is a comprehensive guide that covers both basic and advance
10 min read
React Interview Questions and Answers React is an efficient, flexible, and open-source JavaScript library that allows developers to create simple, fast, and scalable web applications. Jordan Walke, a software engineer who was working for Facebook, created React. Developers with a JavaScript background can easily develop web applications
15+ min read
React Tutorial React is a powerful JavaScript library for building fast, scalable front-end applications. Created by Facebook, it's known for its component-based structure, single-page applications (SPAs), and virtual DOM,enabling efficient UI updates and a seamless user experience.Note: The latest stable version
7 min read
JavaScript Interview Questions and Answers JavaScript is the most used programming language for developing websites, web servers, mobile applications, and many other platforms. In Both Front-end and Back-end Interviews, JavaScript was asked, and its difficulty depends upon the on your profile and company. Here, we compiled 70+ JS Interview q
15+ min read
Class Diagram | Unified Modeling Language (UML) A UML class diagram is a visual tool that represents the structure of a system by showing its classes, attributes, methods, and the relationships between them. It helps everyone involved in a projectâlike developers and designersâunderstand how the system is organized and how its components interact
12 min read
Backpropagation in Neural Network Back Propagation is also known as "Backward Propagation of Errors" is a method used to train neural network . Its goal is to reduce the difference between the modelâs predicted output and the actual output by adjusting the weights and biases in the network.It works iteratively to adjust weights and
9 min read
3-Phase Inverter An inverter is a fundamental electrical device designed primarily for the conversion of direct current into alternating current . This versatile device , also known as a variable frequency drive , plays a vital role in a wide range of applications , including variable frequency drives and high power
13 min read