Skip to content

Commit

Permalink
Convert setUser to useReducer
Browse files Browse the repository at this point in the history
  • Loading branch information
gusaiani committed Dec 4, 2019
1 parent 54a87bb commit c1dd42d
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 13 deletions.
18 changes: 15 additions & 3 deletions src/App.js
@@ -1,4 +1,4 @@
import React, { useState } from 'react'
import React, { useState, useReducer } from 'react'
import PostList from './post/PostList'
import CreatePost from './post/CreatePost'
import UserBar from './user/UserBar'
Expand All @@ -16,13 +16,25 @@ const defaultPosts = [
},
]

function userReducer (state, action) {
switch (action.type) {
case 'LOGIN':
case 'REGISTER':
return action.username
case 'LOGOUT':
return ''
default:
throw new Error('')
}
}

export default function App () {
const [ user, setUser ] = useState('')
const [ user, dispatchUser ] = useReducer(userReducer, '')
const [ posts, setPosts ] = useState(defaultPosts)

return (
<div style={{ padding: 8 }}>
<UserBar user={user} setUser={setUser} />
<UserBar user={user} dispatch={dispatchUser} />
<br />
{user && <CreatePost user={user} posts={posts} setPosts={setPosts} />}
<br />
Expand Down
4 changes: 2 additions & 2 deletions src/user/Login.js
@@ -1,14 +1,14 @@
import React, { useState } from 'react'

export default function Login ({ setUser }) {
export default function Login ({ dispatch }) {
const [ username, setUsername ] = useState('')

function handleUsername (evt) {
setUsername(evt.target.value)
}

return (
<form onSubmit={e => {e.preventDefault();setUser(username)}}>
<form onSubmit={e => {e.preventDefault();dispatch({type: 'LOGIN', username})}}>
<label htmlFor="login-username">Username:</label>
<input type="text"
value={username}
Expand Down
4 changes: 2 additions & 2 deletions src/user/Logout.js
@@ -1,8 +1,8 @@
import React from 'react'

export default function Logout ({ user, setUser }) {
export default function Logout ({ user, dispatch }) {
return (
<form onSubmit={e => {e.preventDefault(); setUser('')}}>
<form onSubmit={e => {e.preventDefault(); dispatch({type: 'LOGOUT'})}}>
Logged in as: <b>{user}</b>
<input type="submit" value="Logout" />
</form>
Expand Down
4 changes: 2 additions & 2 deletions src/user/Register.js
@@ -1,6 +1,6 @@
import React, { useState } from 'react'

export default function Register ({ setUser }) {
export default function Register ({ dispatch }) {
const [ username, setUsername ] = useState('')
const [ password, setPassword ] = useState('')
const [ passwordRepeat, setPasswordRepeat ] = useState('')
Expand All @@ -18,7 +18,7 @@ export default function Register ({ setUser }) {
}

return (
<form onSubmit={e => {e.preventDefault(); setUser(username)}}>
<form onSubmit={e => {e.preventDefault(); dispatch({type: 'REGISTER', username})}}>
<label htmlFor="register-username">Username:</label>
<input
type="text"
Expand Down
8 changes: 4 additions & 4 deletions src/user/UserBar.js
Expand Up @@ -4,14 +4,14 @@ import Login from './Login'
import Logout from './Logout'
import Register from './Register'

export default function UserBar ({ user, setUser }) {
export default function UserBar ({ user, dispatch }) {
if (user) {
return <Logout user={user} setUser={setUser} />
return <Logout user={user} dispatch={dispatch} />
} else {
return (
<React.Fragment>
<Login setUser={setUser} />
<Register setUser={setUser} />
<Login dispatch={dispatch} />
<Register dispatch={dispatch} />
</React.Fragment>
)
}
Expand Down

0 comments on commit c1dd42d

Please sign in to comment.