summaryrefslogtreecommitdiff
path: root/react/07-react-router/src/features/posts/components/PostList.jsx
diff options
context:
space:
mode:
authorKamal Wickramanayake <kamal@inbox.lk>2026-07-01 20:41:10 +0530
committerKamal Wickramanayake <kamal@inbox.lk>2026-07-01 20:41:10 +0530
commit282a6af67b7ab8cce02f9c1e517008fbd775cf93 (patch)
treebbe9ca9a6b7808b55282860f5e3d25856afbb8e5 /react/07-react-router/src/features/posts/components/PostList.jsx
parent6032e3533fa01cb722d750db13419406da344ae0 (diff)
Added React Router sample app
Diffstat (limited to 'react/07-react-router/src/features/posts/components/PostList.jsx')
-rw-r--r--react/07-react-router/src/features/posts/components/PostList.jsx42
1 files changed, 42 insertions, 0 deletions
diff --git a/react/07-react-router/src/features/posts/components/PostList.jsx b/react/07-react-router/src/features/posts/components/PostList.jsx
new file mode 100644
index 0000000..a7ccd3b
--- /dev/null
+++ b/react/07-react-router/src/features/posts/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 <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>
+
+ {/* 1. LIST VIEW */}
+ <ul>
+ {posts.map((post) => (
+ <li key={post.id}>
+ <strong>{post.title}</strong> by {post.author} (ID: {post.id})
+ </li>
+ ))}
+ </ul>
+ </div>
+ );
+}
+
+export default PostList \ No newline at end of file