WeightConverter2.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { TextField, Typography } from "@mui/material";
  2. import React, { useState } from "react";
  3. function WeightConverter2() {
  4. const [kilos, setKilos] = useState<string>("0");
  5. const [grams, setGrams] = useState<string>("0");
  6. const [pounds, setPounds] = useState<string>("0");
  7. console.debug("WeightConverter rerender! kg: " + kilos);
  8. function update_kg(val: string) {
  9. setKilos(val);
  10. if (validateInput(val)) {
  11. const num = Number(val);
  12. setGrams((num * 1000).toString());
  13. setPounds((num * 2.20462).toString());
  14. }
  15. }
  16. function updateG(val: string) {
  17. setGrams(val);
  18. if (validateInput(val)) {
  19. const num = Number(val);
  20. setKilos((num / 1000).toString());
  21. setPounds((num * 0.00220462).toString());
  22. }
  23. }
  24. function update_lbs(val: string) {
  25. setPounds(val);
  26. if (validateInput(val)) {
  27. const num = Number(val);
  28. setKilos((num / 2.20462).toString());
  29. setGrams((num / 0.00220462).toString());
  30. }
  31. }
  32. function validateInput(val: string) {
  33. return !isNaN(Number(val));
  34. }
  35. return (
  36. <>
  37. <Typography variant="h4">WeightConverter</Typography>
  38. <TextField
  39. label="kg"
  40. helperText="Weight in kg"
  41. value={kilos}
  42. error={!validateInput(kilos)}
  43. onChange={(e) => update_kg(e.target.value)}
  44. />
  45. <TextField
  46. label="g"
  47. helperText="Weight in g"
  48. value={grams}
  49. error={!validateInput(grams)}
  50. onChange={(e) => updateG(e.target.value)}
  51. />
  52. <TextField
  53. label="lbs"
  54. helperText="Weight in lbs"
  55. value={pounds}
  56. error={!validateInput(pounds)}
  57. onChange={(e) => update_lbs(e.target.value)}
  58. />
  59. </>
  60. );
  61. }
  62. export default WeightConverter2;