summaryrefslogtreecommitdiff
path: root/react/06-api-calls/src/components/PostTable.jsx
diff options
context:
space:
mode:
authorKamal Wickramanayake <kamal@inbox.lk>2026-07-01 15:30:09 +0530
committerKamal Wickramanayake <kamal@inbox.lk>2026-07-01 15:30:09 +0530
commit6032e3533fa01cb722d750db13419406da344ae0 (patch)
tree759c1c80cc50611ca927b18ac135d4faad3d40c2 /react/06-api-calls/src/components/PostTable.jsx
parent5ed431db2c4a45b35fe1ab9e6d8a69ca62bbbeb5 (diff)
React sample apps: useEffect hook, Axios api calls
Diffstat (limited to 'react/06-api-calls/src/components/PostTable.jsx')
-rw-r--r--react/06-api-calls/src/components/PostTable.jsx52
1 files changed, 52 insertions, 0 deletions
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 <p>Loading posts...</p>;
+ if (error) return <p style={{ color: "red" }}>Error: {error}</p>;
+
+ return (
+ <div style={{ padding: "10px", fontFamily: "sans-serif" }}>
+ <h3>Latest posts</h3>
+
+ <table border="1" cellPadding="10" cellSpacing="0" style={{ width: "100%", textAlign: "left" }}>
+ <thead>
+ <tr style={{ backgroundColor: "#f2f2f2" }}>
+ <th>ID</th>
+ <th>Title</th>
+ <th>Author</th>
+ </tr>
+ </thead>
+ <tbody>
+ {posts.map((post) => (
+ <tr key={post.id}>
+ <td>{post.id}</td>
+ <td>{post.title}</td>
+ <td>{post.author}</td>
+ </tr>
+ ))}
+ </tbody>
+ </table>
+ </div>
+ );
+}
+
+export default PostTable \ No newline at end of file