Maison >interface Web >tutoriel CSS >Créer une application React Expense Tracker
Dans ce tutoriel, nous allons créer une Application Web Expense Tracker à l'aide de React. Ce projet vous aidera à comprendre la gestion des états, la gestion des événements et les mises à jour de listes dynamiques dans React. Il est idéal pour les débutants souhaitant renforcer leurs connaissances du développement React en créant une application pratique et utile.
L'application Expense Tracker permet aux utilisateurs de suivre leurs revenus et leurs dépenses. Il aide à gérer les données financières en catégorisant et en calculant les revenus, les dépenses et le solde total. Ce projet présente l'utilisation de React pour gérer l'état et gérer efficacement les entrées des utilisateurs.
La structure du projet suit une présentation typique d'un projet React :
├── public ├── src │ ├── components │ │ ├── TransactionList.jsx │ │ ├── TransactionItem.jsx │ │ ├── AddTransaction.jsx │ ├── App.jsx │ ├── App.css │ ├── index.js │ └── index.css ├── package.json └── README.md
Ce composant gère l'affichage des transactions et la gestion de l'état de toutes les transactions.
import { useState, useEffect } from "react"; import TransactionItem from "./TransactionItem"; const TransactionList = () => { const [transactions, setTransactions] = useState([]); useEffect(() => { const savedTransactions = JSON.parse(localStorage.getItem("transactions")) || []; setTransactions(savedTransactions); }, []); useEffect(() => { localStorage.setItem("transactions", JSON.stringify(transactions)); }, [transactions]); const deleteTransaction = (index) => { const newTransactions = transactions.filter((_, i) => i !== index); setTransactions(newTransactions); }; return ( <div className="transaction-list"> <h2>Transaction History</h2> <ul> {transactions.map((transaction, index) => ( <TransactionItem key={index} transaction={transaction} deleteTransaction={deleteTransaction} /> ))} </ul> </div> ); }; export default TransactionList;
Le composant TransactionItem représente une transaction individuelle, y compris les options permettant de la supprimer.
const TransactionItem = ({ transaction, deleteTransaction }) => { const sign = transaction.amount < 0 ? "-" : "+"; return ( <li className={transaction.amount < 0 ? "expense" : "income"}> {transaction.text} <span>{sign}${Math.abs(transaction.amount)}</span> <button onClick={deleteTransaction}>Delete</button> </li> ); }; export default TransactionItem;
Ce composant gère l'ajout de nouvelles transactions, permettant aux utilisateurs de saisir des données sur les revenus ou les dépenses.
import { useState } from "react"; const AddTransaction = ({ addTransaction }) => { const [text, setText] = useState(""); const [amount, setAmount] = useState(""); const handleSubmit = (e) => { e.preventDefault(); const transaction = { text, amount: +amount }; addTransaction(transaction); setText(""); setAmount(""); }; return ( <div> <h2>Add New Transaction</h2> <form onSubmit={handleSubmit}> <input type="text" value={text} onChange={(e) => setText(e.target.value)} placeholder="Enter description" /> <input type="number" value={amount} onChange={(e) => setAmount(e.target.value)} placeholder="Enter amount" /> <button type="submit">Add Transaction</button> </form> </div> ); }; export default AddTransaction;
App.jsx sert de racine de l'application, rendant les composants TransactionList et AddTransaction.
import { useState } from "react"; import TransactionList from './components/TransactionList'; import AddTransaction from './components/AddTransaction'; import './App.css'; const App = () => { const [transactions, setTransactions] = useState([]); const addTransaction = (transaction) => { setTransactions([...transactions, transaction]); }; return ( <div className="app"> <h1>Expense Tracker</h1> <TransactionList transactions={transactions} /> <AddTransaction addTransaction={addTransaction} /> <div className="footer"> <p>Made with ❤️ by Abhishek Gurjar</p> </div> </div> ); }; export default App;
Le CSS garantit que l'application semble propre et conviviale.
body { font-family: Arial, sans-serif; background-color: #f4f4f4; } .app { width: 400px; margin: 50px auto; background-color: #fff; padding: 20px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } h1 { text-align: center; } input { width: calc(100% - 10px); padding: 5px; margin-bottom: 10px; } button { width: 100%; padding: 10px; background-color: #007BFF; color: #fff; border: none; cursor: pointer; } button:hover { background-color: #0056b3; } .transaction-list ul { list-style: none; padding: 0; } .transaction-list li { background-color: #f9f9f9; margin: 5px 0; padding: 10px; border-left: 5px solid green; } .transaction-list li.expense { border-left: 5px solid red; } .transaction-list span { float: right; } button { float: right; background-color: red; color: white; padding: 5px; } .footer{ text-align: center; margin: 40px; }
Pour commencer, clonez le référentiel et installez les dépendances :
git clone https://github.com/abhishekgurjar-in/expense-tracker.git cd expense-tracker npm install npm start
L'application commencera à s'exécuter sur http://localhost:3000.
Découvrez la démo en direct d'Expense Tracker ici.
Le projet Expense Tracker montre comment gérer efficacement les listes et les états dans React. C'est un excellent moyen d'apprendre à créer des applications dynamiques avec un stockage de données persistant à l'aide de localStorage.
Abhishek Gurjar est un développeur Web dévoué et passionné par la création d'applications Web pratiques et fonctionnelles. Découvrez plus de ses projets sur GitHub.
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!