Items.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import React, { useState } from 'react';
  2. // la sauvegarde des données en localStorage n'est pas faite ici..
  3. // ItemsList
  4. // =========
  5. const ItemsList = ({items, removeItem}) => (
  6. <ul>
  7. { items.map((item, idx) => (
  8. <li key={idx}>
  9. {item}
  10. <button onClick={() => removeItem(idx)}> Remove </button>
  11. </li>
  12. )) }
  13. </ul>
  14. );
  15. // AddItemForm
  16. // ===========
  17. const AddItemForm = ({addItem}) => {
  18. const [currentText, setCurrentText] = useState('');
  19. const handleSubmit = (e) => {
  20. e.preventDefault();
  21. addItem(currentText);
  22. setCurrentText('');
  23. };
  24. return (
  25. <form onSubmit={handleSubmit}>
  26. <input
  27. type="text"
  28. value={currentText}
  29. onChange={e => setCurrentText(e.target.value)}
  30. />
  31. <button>Add</button>
  32. </form>
  33. );
  34. };
  35. // ItemsApp
  36. // ========
  37. const ItemsApp = () => {
  38. const [items, setItems] = useState([]);
  39. const addItem = (text) => {
  40. setItems(items => [text, ...items].sort((a, b) => a.localeCompare(b)));
  41. };
  42. const removeItem = (index) => {
  43. setItems(items => items.filter((i, idx) => idx !== index));
  44. };
  45. return <>
  46. <AddItemForm addItem={addItem} />
  47. <ItemsList
  48. items={items}
  49. removeItem={removeItem}
  50. />
  51. </>;
  52. };
  53. export default ItemsApp;