Les crypto-monnaies font fureur ces jours-ci, et avec la pléthore de pièces disponibles, il est essentiel de disposer d'un outil pour rechercher et afficher facilement les détails les concernant. C'est exactement ce que fait l'application Crypto Finder. Construite avec React, cette application offre aux utilisateurs une expérience transparente pour rechercher, filtrer et afficher les détails des crypto-monnaies.
L'application Crypto Finder comprend :
Voici un bref aperçu de la structure du projet :
Pour démarrer avec l'application Crypto Finder, suivez ces étapes :
git clone https://github.com/abhishekgurjar-in/Crypto-Finder cd crypto-finder
npm install
npm start
Le composant App.js configure le routage et inclut les composants Navbar et Footer.
import React from "react"; import CryptoFinder from "./components/CryptoFinder"; import "./App.css"; import Navbar from "./components/Navbar"; import Footer from "./components/Footer"; import {Route,Routes} from "react-router-dom" import CryptoDetails from "./components/CryptoDetails"; const App = () => { return ( <div> <Navbar /> <Routes> <Route path="/" element={<CryptoFinder/>}/> <Route path="/details/:id" element={<CryptoDetails/>}/> </Routes> <Footer /> </div> ); }; export default App;
Le composant CryptoFinder.js gère la récupération et l'affichage de la liste des crypto-monnaies. Il comprend une barre de recherche pour filtrer les résultats.
import React, { useEffect, useState } from "react"; import axios from "axios"; import { Link } from "react-router-dom"; const CryptoFinder = () => { const [search, setSearch] = useState(""); const [crypto, setCrypto] = useState([]); const [filteredCrypto, setFilteredCrypto] = useState([]); useEffect(() => { axios .get(`https://api.coingecko.com/api/v3/coins/markets`, { params: { vs_currency: "inr", order: "market_cap_desc", per_page: 100, page: 1, sparkline: false, }, }) .then((res) => { setCrypto(res.data); setFilteredCrypto(res.data); }); }, []); const handleSearch = () => { const filteredData = crypto.filter((data) => { return data.name.toLowerCase().includes(search.toLowerCase()); }); setFilteredCrypto(filteredData); }; if (crypto.length === 0) { return ( <div className="loader-box"> <div className="loader"></div> </div> ); } return ( <div className="crypto-finder"> <div className="input-box"> <input type="text" value={search} onChange={(e) => setSearch(e.target.value)} onKeyDown={handleSearch} placeholder="Search for a cryptocurrency" /> <button onClick={handleSearch}>Search</button> </div> <div className="cards"> {filteredCrypto.map((val, id) => ( <div className="card" key={id}> <img src={val.image} alt={val.name} /> <h1>{val.name}</h1> <h4>{val.symbol.toUpperCase()}</h4> <h4>₹{val.current_price.toFixed(2)}</h4> <Link to={`/details/${val.id}`}> <button>View Details</button> </Link> </div> ))} </div> </div> ); }; export default CryptoFinder;
Le composant CryptoDetails.js récupère et affiche des informations détaillées sur une crypto-monnaie sélectionnée.
import React, { useEffect, useState } from "react"; import axios from "axios"; import { useParams } from "react-router-dom"; const CryptoDetails = () => { const { id } = useParams(); const [cryptoDetails, setCryptoDetails] = useState(null); useEffect(() => { axios .get(`https://api.coingecko.com/api/v3/coins/${id}`, { params: { localization: false, }, }) .then((res) => { setCryptoDetails(res.data); }); }, [id]); if (!cryptoDetails) { return ( <div className="loader-box"> <div className="loader"></div> </div> ); } return ( <div className="crypto-details"> <div className="basic-details-image-box"> <div className="basic-details"> <h1>{cryptoDetails.name}</h1> <h4>{cryptoDetails.symbol.toUpperCase()}</h4> <h4> Current Price: ₹ {cryptoDetails.market_data.current_price.inr.toFixed(2)} </h4> </div> <div className="image-box"> <img src={cryptoDetails.image.large} alt={cryptoDetails.name} /> </div> </div> <div className="detail-desc"> <h3>Description :</h3> <p >{cryptoDetails.description.en}</p> </div> <div className="market-and-additional"> <div className="market-data"> <h2>Market Data</h2> <p> <b>Market Cap: </b>₹ {cryptoDetails.market_data.market_cap.inr.toLocaleString()} </p> <p> <b>Total Volume: </b>₹ {cryptoDetails.market_data.total_volume.inr.toLocaleString()} </p> <p><b>24h High:</b> ₹{cryptoDetails.market_data.high_24h.inr}</p> <p><b>24h Low:</b> ₹{cryptoDetails.market_data.low_24h.inr}</p> <p> <b> Price Change (24h):</b> ₹ {cryptoDetails.market_data.price_change_24h.toFixed(2)} </p> <p> <b>Price Change Percentage (24h):</b>{" "} {cryptoDetails.market_data.price_change_percentage_24h.toFixed(2)}% </p> </div> <div className="additional-info"> <h2>Additional Information</h2> <p><b>Genesis Date:</b> {cryptoDetails.genesis_date || "N/A"}</p> <p> <b>Homepage:</b>{" "} <a href={cryptoDetails.links.homepage[0]} target="_blank" rel="noopener noreferrer" > {cryptoDetails.links.homepage[0]} </a> </p> <p> <b> Blockchain Site:</b>{" "} <a href={cryptoDetails.links.blockchain_site[0]} target="_blank" rel="noopener noreferrer" > {cryptoDetails.links.blockchain_site[0]} </a> </p> </div> </div> </div> ); }; export default CryptoDetails;
Le composant Navbar.js fournit un en-tête pour l'application.
import React from 'react' const Navbar = () => { return ( <div className="navbar"> <h1>Crypto Finder</h1> </div> ) } export default Navbar
Le composant Footer.js fournit un pied de page pour l'application.
import React from 'react' const Footer = () => { return ( <div className="footer"> <p>Made with ❤️ by Abhishek Gurjar</p> </div> ) } export default Footer
Vous pouvez voir la démo en direct de l'application Crypto Finder ici.
Créer l'application Crypto Finder a été une expérience amusante et éducative. Il montre comment utiliser React pour récupérer et afficher des données, gérer le routage et créer une interface réactive et conviviale. J'espère que ce projet vous sera utile et qu'il vous inspirera pour créer vos propres applications avec React !
Abhishek Gurjar
N'hésitez pas à ajuster ou à ajouter plus de détails en fonction de vos préférences ou des fonctionnalités supplémentaires que vous avez peut-être implémentées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!