Advertisement
RokasC

More on React forms.

Jul 23rd, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.03 KB | None | 0 0
  1. import React from "react";
  2.  
  3. class App extends React.Component {
  4. constructor() {
  5. super();
  6.  
  7. this.state = {
  8. firstName: "",
  9. lastName: "",
  10. age: "",
  11. gender: "",
  12. location: "",
  13. dietaryRestrictions: {
  14. vegetarian: false,
  15. kocher: false,
  16. lactoseFree: false
  17. }
  18. }
  19.  
  20. this.handleChange = this.handleChange.bind(this);
  21. };
  22.  
  23. handleChange(event) {
  24. const {name, value, checked, type} = event.target;
  25. type === "checkbox" ?
  26. this.setState((prevState) => {
  27. return {
  28. dietaryRestrictions: {
  29. ...prevState.dietaryRestrictions,
  30. [name]: checked
  31. }
  32. }
  33. })
  34. :
  35. this.setState({ [name]: value })
  36. }
  37.  
  38. render() {
  39. return(
  40. <div>
  41. <form>
  42. <input
  43. placeholder="First Name"
  44. name="firstName"
  45. value={this.state.firstName}
  46. type="text"
  47. onChange={this.handleChange}
  48. /> <br/>
  49.  
  50. <input
  51. placeholder="Last Name"
  52. name="lastName"
  53. value={this.state.lastName}
  54. type="text"
  55. onChange={this.handleChange}
  56. /> <br/>
  57.  
  58. <input
  59. placeholder="Age"
  60. name="age"
  61. value={this.state.age}
  62. type="number"
  63. onChange={this.handleChange}
  64. /> <br/>
  65.  
  66. <label>Male
  67. <input
  68. type="radio"
  69. name="gender"
  70. value="male"
  71. checked={this.state.gender === "male"}
  72. onChange={this.handleChange}
  73. />
  74. </label>
  75.  
  76. <label>Female
  77. <input
  78. type="radio"
  79. name="gender"
  80. value="female"
  81. checked={this.state.gender === "female"}
  82. onChange={this.handleChange}
  83. />
  84. </label>
  85.  
  86. <br/>
  87.  
  88. <select
  89. value={this.state.location}
  90. name="location"
  91. onChange={this.handleChange}>
  92. <option value="">--Choose country of destination--</option>
  93. <option value="china">China</option>
  94. <option value="japan">Japan</option>
  95. <option value="south korea">South Korea</option>
  96. </select>
  97.  
  98. <br/>
  99.  
  100. <label>
  101. Vegetarian:
  102. <input
  103. type="checkbox"
  104. name="vegetarian"
  105. checked={this.state.dietaryRestrictions.vegetarian}
  106. onChange={this.handleChange}/>
  107. </label>
  108.  
  109. <br />
  110.  
  111. <label>
  112. Kocher:
  113. <input
  114. type="checkbox"
  115. name="kocher"
  116. checked={this.state.dietaryRestrictions.kocher}
  117. onChange={this.handleChange}/>
  118. </label>
  119.  
  120. <br />
  121.  
  122. <label>
  123. Lactose free:
  124. <input
  125. type="checkbox"
  126. name="lactoseFree"
  127. checked={this.state.dietaryRestrictions.lactoseFree}
  128. onChange={this.handleChange}/>
  129. </label>
  130.  
  131. </form>
  132.  
  133. <br/>
  134.  
  135. <h1>Name: {this.state.firstName} {this.state.lastName}</h1>
  136. <h1>Age: {this.state.age}</h1>
  137. <h1>Gender: {this.state.gender}</h1>
  138. <h1>Destination: {this.state.location}</h1>
  139. <h1>Dietary restrictions:
  140. <p>Vegetarian: {this.state.dietaryRestrictions.vegetarian ? "Yes" : "No"}</p>
  141. <p>Kosher: {this.state.dietaryRestrictions.kocher ? "Yes" : "No"}</p>
  142. <p>Lactose-free: {this.state.dietaryRestrictions.lactoseFree ? "Yes" : "No"}</p>
  143. </h1>
  144. </div>
  145. );
  146. };
  147.  
  148. }
  149.  
  150. export default App
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement