Skip to content

Commit e8aabf9

Browse files
committed
Basic post request
1 parent 98f8775 commit e8aabf9

File tree

3 files changed

+58
-6
lines changed

3 files changed

+58
-6
lines changed

db.json

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,26 @@
1414
"id": 3,
1515
"name": "Wonder Woman",
1616
"alterEgo": "Princess Diana"
17+
},
18+
{
19+
"name": "Spiderman",
20+
"alterEgo": "Third person",
21+
"id": 4
22+
},
23+
{
24+
"name": "Miki",
25+
"alterEgo": "John Doe",
26+
"id": 5
27+
},
28+
{
29+
"name": "Test",
30+
"alterEgo": "Big mike",
31+
"id": 6
32+
},
33+
{
34+
"name": "Test",
35+
"alterEgo": "Big mike",
36+
"id": 7
1737
}
1838
],
1939
"friends": [
@@ -39,7 +59,11 @@
3959
"channels": [
4060
{
4161
"id": "codevolution",
42-
"courses": ["react", "vue", "angular"]
62+
"courses": [
63+
"react",
64+
"vue",
65+
"angular"
66+
]
4367
}
4468
],
4569
"colors": [
@@ -76,4 +100,4 @@
76100
"label": "purple"
77101
}
78102
]
79-
}
103+
}

src/lib/hooks/useSuperHeroesData.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useQuery } from 'react-query'
1+
import { useQuery, useMutation } from 'react-query'
22
import axios from 'axios'
33
import { SuperHero } from 'interfaces'
44

@@ -11,9 +11,17 @@ const fetchSuperHeroes = () => {
1111
return axios.get('http://localhost:4000/superheroes')
1212
}
1313

14+
const addSuperHero = (hero: { name: string; alterEgo: string }) => {
15+
return axios.post('http://localhost:4000/superheroes', hero)
16+
}
17+
1418
export const useSuperHeroesData = ({ onSuccess, onError }: Props) => {
1519
return useQuery('super-heroes', fetchSuperHeroes, {
1620
onError,
1721
onSuccess,
1822
})
1923
}
24+
25+
export const useAddSuperHeroData = () => {
26+
return useMutation(addSuperHero)
27+
}

src/pages/RQSuperHeroes/RQSuperHeroes.tsx

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
import { FC } from 'react'
2-
import { useSuperHeroesData } from 'lib/hooks/useSuperHeroesData'
1+
import { FC, FormEvent, useState } from 'react'
2+
import { useSuperHeroesData, useAddSuperHeroData } from 'lib/hooks/useSuperHeroesData'
33
import { SuperHero } from 'interfaces'
44
import { Link } from 'react-router-dom'
55

66
interface Props {}
77

88
const RQSuperHeroes: FC<Props> = (props: Props) => {
9+
const [name, setName] = useState<string>('')
10+
const [alterEgo, setAlterEgo] = useState<string>('')
11+
912
const onError = (error: Error) => {
1013
console.log('Perform side effect after encountering error', error)
1114
}
@@ -14,10 +17,21 @@ const RQSuperHeroes: FC<Props> = (props: Props) => {
1417
console.log('Perform side effect after encountering error', response)
1518
}
1619

17-
const { data, isLoading, isError, error, isFetching } = useSuperHeroesData({ onSuccess, onError })
20+
const { data, isLoading, isError, error, isFetching, refetch } = useSuperHeroesData({ onSuccess, onError })
21+
22+
const { mutate: addHero, isLoading: isLoadingHero, isError: isErrorHero, error: errorHero } = useAddSuperHeroData()
1823

1924
console.log({ isLoading, isFetching })
2025

26+
const handleSubmit = (e: FormEvent) => {
27+
e.preventDefault()
28+
const hero = {
29+
name,
30+
alterEgo,
31+
}
32+
addHero(hero)
33+
}
34+
2135
if (isLoading || isFetching) {
2236
return <h2>Loading...</h2>
2337
}
@@ -29,6 +43,12 @@ const RQSuperHeroes: FC<Props> = (props: Props) => {
2943
return (
3044
<>
3145
<h2>RQ Super Heroes</h2>
46+
<form onSubmit={(e) => handleSubmit(e)}>
47+
<input type="text" id="name" value={name} onChange={(e) => setName(e.target.value)} />
48+
<input type="text" id="name" value={alterEgo} onChange={(e) => setAlterEgo(e.target.value)} />
49+
<button type="submit">Add hero</button>
50+
</form>
51+
<button onClick={() => refetch()}>Refetch heroes</button>
3252
<ul>
3353
{data.data.map((hero: SuperHero, index: number) => (
3454
<li key={index}>

0 commit comments

Comments
 (0)