diff options
| author | Kamal Wickramanayake <kamal@inbox.lk> | 2026-07-02 20:17:44 +0530 |
|---|---|---|
| committer | Kamal Wickramanayake <kamal@inbox.lk> | 2026-07-02 20:17:44 +0530 |
| commit | b221a83ecef1dd7f9583d5107017d24e668205a6 (patch) | |
| tree | f519d4a08e6fde2d175b2a16b6d71e90890666d2 /react/08-auth-with-context/src/features/posts/components | |
| parent | 48f6e61f90e5a8465a9cee8b501d990c89d79c33 (diff) | |
Added React global state + role based security sample app
Diffstat (limited to 'react/08-auth-with-context/src/features/posts/components')
| -rw-r--r-- | react/08-auth-with-context/src/features/posts/components/PostList.jsx | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/react/08-auth-with-context/src/features/posts/components/PostList.jsx b/react/08-auth-with-context/src/features/posts/components/PostList.jsx new file mode 100644 index 0000000..a7ccd3b --- /dev/null +++ b/react/08-auth-with-context/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 |
