Skip to content

Instantly share code, notes, and snippets.

@jsmanifest
Created June 23, 2019 22:30
Show Gist options
  • Save jsmanifest/55389e4e4d383ee16cc7d45ba6815f51 to your computer and use it in GitHub Desktop.
Save jsmanifest/55389e4e4d383ee16cc7d45ba6815f51 to your computer and use it in GitHub Desktop.
const App = () => {
const { onSubmit, friends, undo } = useApp()
const [name, setName] = useState('')
const [gender, setGender] = useState('Male')
const onNameChange = (e) => setName(e.target.value)
const onGenderChange = (e) => setGender(e.target.value)
const resetValues = () => {
setName('')
setGender('Male')
}
return (
<div>
<form className="form" onSubmit={onSubmit({ name, gender }, resetValues)}>
<div>
<input
onChange={onNameChange}
value={name}
type="text"
name="name"
placeholder="Friend's Name"
/>
</div>
<div>
<select onChange={onGenderChange} name="gender" value={gender}>
<option value="Male">Male</option>
<option value="Female">Female</option>
<option value="Other">Other</option>
</select>
</div>
<div>
<button type="submit">Add</button>
</div>
</form>
<div className="undo-actions">
<div>
<button type="button" onClick={undo}>
Undo
</button>
</div>
</div>
<div className="boxes">
{friends.map(({ name, gender }, index) => (
<FriendBox key={`friend_${index}`} gender={gender}>
<div className="box-name">Name: {name}</div>
<div className="gender-container">
<img src={gender === 'Female' ? female : male} alt="" />
</div>
</FriendBox>
))}
</div>
</div>
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment