Skip to content

Commit cdd4de3

Browse files
committed
Using the Custom Http Hook
1 parent e7895b1 commit cdd4de3

File tree

2 files changed

+22
-33
lines changed

2 files changed

+22
-33
lines changed

src/App.js

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,31 @@ import React, { useEffect, useState } from 'react';
22

33
import Tasks from './components/Tasks/Tasks';
44
import NewTask from './components/NewTask/NewTask';
5+
import useHttp from './hooks/useHttp';
56

67
function App() {
7-
const [isLoading, setIsLoading] = useState(false);
8-
const [error, setError] = useState(null);
98
const [tasks, setTasks] = useState([]);
109

11-
const fetchTasks = async (taskText) => {
12-
setIsLoading(true);
13-
setError(null);
14-
try {
15-
const response = await fetch(
16-
'https://react-http-89353-default-rtdb.europe-west1.firebasedatabase.app/tasks.json'
17-
);
18-
19-
if (!response.ok) {
20-
throw new Error('Request failed!');
21-
}
22-
23-
const data = await response.json();
10+
const { isLoading, error, sendRequest: fetchTasks } = useHttp();
2411

12+
useEffect(() => {
13+
const transformTasks = (taskObj) => {
2514
const loadedTasks = [];
2615

27-
for (const taskKey in data) {
28-
loadedTasks.push({ id: taskKey, text: data[taskKey].text });
16+
for (const taskKey in taskObj) {
17+
loadedTasks.push({ id: taskKey, text: taskObj[taskKey].text });
2918
}
3019

3120
setTasks(loadedTasks);
32-
} catch (err) {
33-
setError(err.message || 'Something went wrong!');
34-
}
35-
setIsLoading(false);
36-
};
37-
38-
useEffect(() => {
39-
fetchTasks();
40-
}, []);
21+
};
22+
23+
fetchTasks(
24+
{
25+
url: 'https://react-http-89353-default-rtdb.europe-west1.firebasedatabase.app/tasks.json',
26+
},
27+
transformTasks
28+
);
29+
}, [fetchTasks]);
4130

4231
const taskAddHandler = (task) => {
4332
setTasks((prevTasks) => prevTasks.concat(task));

src/hooks/useHttp.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
import { useState } from 'react';
1+
import { useCallback, useState } from 'react';
22

3-
const useHttp = (requestConfig, applyData) => {
3+
const useHttp = () => {
44
const [isLoading, setIsLoading] = useState(false);
55
const [error, setError] = useState(null);
66

7-
const sendRequest = async () => {
7+
const sendRequest = useCallback(async (requestConfig, applyData) => {
88
setIsLoading(true);
99
setError(null);
1010
try {
1111
const response = await fetch(requestConfig.url, {
12-
method: requestConfig.method,
13-
headers: requestConfig.headers,
14-
body: JSON.stringify(requestConfig.body),
12+
method: requestConfig.method ? requestConfig.method : 'GET',
13+
headers: requestConfig.headers ? requestConfig.headers : {},
14+
body: requestConfig.body ? JSON.stringify(requestConfig.body) : null,
1515
});
1616

1717
if (!response.ok) {
@@ -24,7 +24,7 @@ const useHttp = (requestConfig, applyData) => {
2424
setError(err.message || 'Something went wrong!');
2525
}
2626
setIsLoading(false);
27-
};
27+
}, []);
2828

2929
return {
3030
isLoading,

0 commit comments

Comments
 (0)