From 6032e3533fa01cb722d750db13419406da344ae0 Mon Sep 17 00:00:00 2001 From: Kamal Wickramanayake Date: Wed, 1 Jul 2026 15:30:09 +0530 Subject: React sample apps: useEffect hook, Axios api calls --- react/06-api-calls/src/components/PostList.jsx | 42 ++++++++++++++++++++ react/06-api-calls/src/components/PostTable.jsx | 52 +++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 react/06-api-calls/src/components/PostList.jsx create mode 100644 react/06-api-calls/src/components/PostTable.jsx (limited to 'react/06-api-calls/src/components') diff --git a/react/06-api-calls/src/components/PostList.jsx b/react/06-api-calls/src/components/PostList.jsx new file mode 100644 index 0000000..e31baef --- /dev/null +++ b/react/06-api-calls/src/components/PostList.jsx @@ -0,0 +1,42 @@ +import { useState, useEffect } from 'react' +import api from '../services/api' + +const PostList = () => { + const [posts, setPosts] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + // Fetch data on component mount + useEffect(() => { + api + .get("/posts") // Replace with your actual API endpoint + .then((response) => { + setPosts(response.data); + setLoading(false); + }) + .catch((err) => { + setError(err.message); + setLoading(false); + }); + }, []); + + if (loading) return

Loading posts...

; + if (error) return

Error: {error}

; + + return ( +
+

Latest posts

+ + {/* 1. LIST VIEW */} + +
+ ); +} + +export default PostList \ No newline at end of file diff --git a/react/06-api-calls/src/components/PostTable.jsx b/react/06-api-calls/src/components/PostTable.jsx new file mode 100644 index 0000000..90e3589 --- /dev/null +++ b/react/06-api-calls/src/components/PostTable.jsx @@ -0,0 +1,52 @@ +import { useState, useEffect } from 'react' +import api from '../services/api' + +const PostTable = () => { + const [posts, setPosts] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + // Fetch data on component mount + useEffect(() => { + api + .get("/posts") // Replace with your actual API endpoint + .then((response) => { + setPosts(response.data); + setLoading(false); + }) + .catch((err) => { + setError(err.message); + setLoading(false); + }); + }, []); + + if (loading) return

Loading posts...

; + if (error) return

Error: {error}

; + + return ( +
+

Latest posts

+ + + + + + + + + + + {posts.map((post) => ( + + + + + + ))} + +
IDTitleAuthor
{post.id}{post.title}{post.author}
+
+ ); +} + +export default PostTable \ No newline at end of file -- cgit v1.2.3