import React, {ChangeEvent, useCallback, useMemo, useState} from 'react'; import './App.css'; import {Col, Container, Form, InputGroup, Row,} from "react-bootstrap"; import {Character, CharacterStatus, SPType} from "./CharacterStatus"; function App() { const [maxHp, _setMaxHp] = useState(1) const [hp, _setHp] = useState(1) const setHp = useCallback(function (v: number) { v = Math.floor(v) if (Number.isNaN(v) || v < 0 || v > maxHp || v === hp) { return } _setHp(v) }, [hp, maxHp]) const setHpMax = useCallback(function (v: number) { v = Math.floor(v) if (Number.isNaN(v) || v < 0 || v > 9999 || v === maxHp) { return } if (v < hp) { setHp(v) } _setMaxHp(v) }, [hp, maxHp, setHp]) const onHpChange = useCallback( (e: ChangeEvent) => setHp(parseInt(e.target.value)), [setHp]) const onMaxHpChange = useCallback( (e: ChangeEvent) => setHpMax(parseInt(e.target.value)), [setHpMax]) const [maxMp, _setMaxMp] = useState(6) const [mp, _setMp] = useState(6) const setMp = useCallback(function (v: number) { v = Math.floor(v) if (Number.isNaN(v) || v < 0 || v > maxMp || v === mp) { return } _setMp(v) }, [mp, maxMp]) const setMpMax = useCallback(function (v: number) { v = Math.floor(v) if (Number.isNaN(v) || v < 0 || v > 9999 || v === maxMp) { return } if (v < mp) { setMp(v) } _setMaxMp(v) }, [mp, maxMp, setMp]) const onMpChange = useCallback( (e: ChangeEvent) => setMp(parseInt(e.target.value)), [setMp]) const onMaxMpChange = useCallback( (e: ChangeEvent) => setMpMax(parseInt(e.target.value)), [setMpMax]) const character = useMemo(() => ({ name: "Test", level: 50, hp: 40, maxHp: 50, mp: 40, maxMp: 50, ip: mp, maxIp: maxMp, sp: 1, spType: SPType.UltimaPoints, turnsLeft: hp, turnsTotal: maxHp, }), [hp, maxHp, mp, maxMp]) return ( Max HP Current HP Max MP Current MP ); } export default App;