Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.03 KB | None | 0 0
  1. import React, { useState } from "react";
  2. import logo from "./logo.svg";
  3. import "./App.css";
  4. import Stat from "./Components/Stat";
  5. import Trait from "./Components/Trait";
  6.  
  7. function App() {
  8. const [name, setName] = useState("");
  9. const [age, setAge] = useState("");
  10. const [race, setRace] = useState("");
  11. const [newStat, setNewStat] = useState("");
  12. const [stats, setStats] = useState([
  13. /*{ statsName: "Strength", statsValue: 20 },
  14. { statsName: "Agility", statsValue: 5 },
  15. { statsName: "Stamina", statsValue: 10 }*/
  16. ]);
  17.  
  18. function randomStatValue() {
  19. return Math.floor(Math.random() * 20 + 1);
  20. }
  21.  
  22. const [newTrait, setNewTrait] = useState("");
  23. const [traits, setTraits] = useState([]);
  24.  
  25. const character = {
  26. name: name,
  27. age: age,
  28. race: race,
  29. traits: traits,
  30. stats: stats
  31. };
  32.  
  33. const handleClick = () => {
  34. setName("");
  35. setAge(0);
  36. setNewStat([]);
  37. setRace("");
  38. };
  39.  
  40. const addTrait = () => {
  41. traits.push(newTrait);
  42. setTraits(traits);
  43. setNewTrait("");
  44. };
  45.  
  46. const removeTrait = index => {
  47. const updatedTrait = traits.splice(0);
  48. updatedTrait.splice(index, 1);
  49. setTraits(updatedTrait);
  50. };
  51.  
  52. const addStat = () => {
  53. const newStatObject = {
  54. statsName: newStat,
  55. statsValue: randomStatValue()
  56. };
  57.  
  58. stats.push(newStatObject);
  59. setStats(stats);
  60. setNewStat("");
  61. };
  62. //Remove single stat
  63. const removeStat = index => {
  64. console.log("removeStat clicked, " + index);
  65. const updatedStat = stats.splice(0);
  66. updatedStat.splice(index, 1);
  67. setStats(updatedStat);
  68. };
  69.  
  70. const handleChange = event => {
  71. setName(event.target.value);
  72. /*
  73. if (event.target.value.length >= 3) {
  74. setName("Yes");
  75. } */
  76. };
  77.  
  78. const handleRaceChange = event => {
  79. setRace(event.target.value);
  80. };
  81.  
  82. const handleNewStatChange = event => {
  83. setNewStat(event.target.value);
  84. };
  85.  
  86. const handleNewTraitChange = event => {
  87. setNewTrait(event.target.value);
  88. };
  89.  
  90. const handleAgeChange = event => {
  91. if (!isNaN(event.target.value)) {
  92. setAge(event.target.value);
  93. }
  94. };
  95.  
  96. return (
  97. <div className="App">
  98. <h1>DnD Character Creator</h1>
  99. <input
  100. type="text"
  101. value={name}
  102. onChange={handleChange}
  103. placeholder="Character Name"
  104. />
  105. <input
  106. type="number"
  107. value={age}
  108. onChange={handleAgeChange}
  109. placeholder="Character Age"
  110. />
  111. <input
  112. type="text"
  113. value={race}
  114. onChange={handleRaceChange}
  115. placeholder="Character Race"
  116. />
  117. <input
  118. type="text"
  119. value={newTrait}
  120. onChange={handleNewTraitChange}
  121. placeholder="New Trait"
  122. />
  123. <button onClick={addTrait}>Add Trait</button>
  124. <input
  125. type="text"
  126. value={newStat}
  127. onChange={handleNewStatChange}
  128. placeholder="New Stat"
  129. />
  130. <button onClick={addStat}>Add Stat</button>
  131. <p>
  132. <strong>Name: </strong>
  133. {character.name}
  134. <br></br> <strong>Age: </strong>
  135. {character.age} <br></br>
  136. <strong>Race: </strong>
  137. {character.race}
  138. </p>
  139. <h2> Traits </h2>
  140. <ul>
  141. {character.traits.map((trait, key) => {
  142. return (
  143. <Trait
  144. key={key}
  145. trait={trait}
  146. removeFunction={removeTrait}
  147. index={key}
  148. />
  149. );
  150. })}
  151. </ul>
  152. <h2>Stats</h2>
  153. <ul>
  154. {/* Använder map-metoden för att skriva ut en Stat komponent för varje Stat i Stats-arrayen */}
  155. {character.stats.map((stat, key) => {
  156. return (
  157. <Stat
  158. key={key}
  159. stat={stat}
  160. removeFunction={removeStat}
  161. index={key}
  162. />
  163. );
  164. })}
  165. </ul>
  166. <button onClick={handleClick}>Click me!</button>
  167. </div>
  168. );
  169. }
  170.  
  171. export default App;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement