1
1
import React , { Fragment , useState , useEffect } from 'react' ;
2
2
import axios from 'axios' ;
3
3
4
- const useDataApi = ( url , defaultSearch , defaultState ) => {
5
- const [ data , setData ] = useState ( defaultState ) ;
6
- const [ search , setSearch ] = useState ( defaultSearch ) ;
4
+ const useDataApi = ( initialUrl , initialData ) => {
5
+ const [ data , setData ] = useState ( initialData ) ;
6
+ const [ url , setUrl ] = useState ( initialUrl ) ;
7
7
const [ isLoading , setIsLoading ] = useState ( false ) ;
8
8
const [ isError , setIsError ] = useState ( false ) ;
9
9
@@ -13,7 +13,7 @@ const useDataApi = (url, defaultSearch, defaultState) => {
13
13
setIsLoading ( true ) ;
14
14
15
15
try {
16
- const result = await axios ( ` ${ url } ${ search } ` ) ;
16
+ const result = await axios ( url ) ;
17
17
18
18
setData ( result . data ) ;
19
19
} catch ( error ) {
@@ -22,32 +22,35 @@ const useDataApi = (url, defaultSearch, defaultState) => {
22
22
23
23
setIsLoading ( false ) ;
24
24
} ,
25
- [ search ] ,
25
+ [ url ] ,
26
26
) ;
27
27
28
- const doSearch = ( event , query ) => {
29
- setSearch ( query ) ;
28
+ const getRequest = ( event , url ) => {
29
+ setUrl ( url ) ;
30
30
event . preventDefault ( ) ;
31
31
} ;
32
32
33
- return { data, isLoading, isError, doSearch } ;
33
+ return { data, isLoading, isError, getRequest } ;
34
34
} ;
35
35
36
- const INITIAL_SEARCH = 'redux' ;
37
- const INITIAL_DATA = { hits : [ ] } ;
38
-
39
36
function App ( ) {
40
- const [ query , setQuery ] = useState ( INITIAL_SEARCH ) ;
37
+ const [ query , setQuery ] = useState ( 'redux' ) ;
41
38
42
- const { data, isLoading, isError, doSearch } = useDataApi (
43
- 'http://hn.algolia.com/api/v1/search?query=' ,
44
- INITIAL_SEARCH ,
45
- INITIAL_DATA ,
39
+ const { data, isLoading, isError, getRequest } = useDataApi (
40
+ 'http://hn.algolia.com/api/v1/search?query=redux' ,
41
+ { hits : [ ] } ,
46
42
) ;
47
43
48
44
return (
49
45
< Fragment >
50
- < form onSubmit = { event => doSearch ( event , query ) } >
46
+ < form
47
+ onSubmit = { event =>
48
+ getRequest (
49
+ event ,
50
+ `http://hn.algolia.com/api/v1/search?query=${ query } ` ,
51
+ )
52
+ }
53
+ >
51
54
< input
52
55
type = "text"
53
56
value = { query }
0 commit comments