Skip to content

Commit 5ba2c3b

Browse files
committed
Refactor Stories component to use useCallback for bookmark toggling and optimize rendering with memo
1 parent 259fa44 commit 5ba2c3b

File tree

1 file changed

+31
-25
lines changed

1 file changed

+31
-25
lines changed

‎src/Stories.jsx‎

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,62 @@
1-
import React from "react";
1+
import React, { useCallback, memo } from "react";
22
import { useGlobalContext } from "./Context";
33

44
const Stories = () => {
5-
const { hits, isLoading,bookMark,setBookMark,addBookMark } = useGlobalContext();
5+
const { hits, isLoading, bookMark, setBookMark } = useGlobalContext();
6+
7+
const toggleBookmark = useCallback((news) => {
8+
const isBookmarked = bookMark.some((item) => item.objectID === news.objectID);
9+
10+
const updatedBookmarks = isBookmarked
11+
? bookMark.filter((item) => item.objectID !== news.objectID)
12+
: [...bookMark, news];
13+
14+
setBookMark(updatedBookmarks);
15+
localStorage.setItem("bookmarks", JSON.stringify(updatedBookmarks));
16+
}, [bookMark, setBookMark]);
17+
618
if (isLoading) {
7-
return (
8-
<>
9-
<h1>Loading.....</h1>
10-
</>
11-
);
19+
return <h1>Loading...</h1>;
1220
}
13-
const toggleBookmark = (news) => {
14-
const isBookmarked = bookMark.some((item) => item.objectID === news.objectID);
15-
if (isBookmarked) {
16-
const updatedBookmarks = bookMark.filter((item) => item.objectID !== news.objectID);
17-
setBookMark(updatedBookmarks);
18-
localStorage.setItem("bookmarks", JSON.stringify(updatedBookmarks));
19-
} else {
20-
addBookMark(news);
21-
}
22-
};
2321

2422
return (
2523
<>
2624
<div className="stories-div">
2725
{hits.map((curPost) => {
2826
const { title, author, objectID, url, num_comments } = curPost;
2927
const isBookmarked = bookMark.some((item) => item.objectID === objectID);
28+
3029
return (
3130
<div className="card" key={objectID}>
3231
<h2>{title}</h2>
3332
<p>
34-
By <span> {author}</span> | <span> {num_comments} </span>
35-
comments
33+
By <span>{author}</span> | <span>{num_comments}</span> comments
3634
</p>
35+
3736
<div className="card-button">
3837
<a href={url} target="_blank" rel="noreferrer">
3938
Read More
4039
</a>
41-
<button onClick={() => toggleBookmark(curPost)} style={{ paddingBlock : "0.6rem"}}>
42-
{
43-
isBookmarked ? "❌ Remove" : "🔖 Save"
44-
}
40+
41+
<button
42+
onClick={() => toggleBookmark(curPost)}
43+
style={{ paddingBlock: "0.6rem" }}
44+
>
45+
{isBookmarked ? "❌ Remove" : "🔖 Save"}
4546
</button>
4647
</div>
4748
</div>
4849
);
4950
})}
50-
<p>Made with ❤️ by <a href="https://www.linkedin.com/in/choudhury-mehbub-alam-b6b191219/">DevLeo</a></p>
51+
52+
<p>Made with ❤️ by
53+
<a href="https://www.linkedin.com/in/choudhury-mehbub-alam-b6b191219/">
54+
DevLeo
55+
</a>
56+
</p>
5157
</div>
5258
</>
5359
);
5460
};
5561

56-
export default Stories;
62+
export default memo(Stories);

0 commit comments

Comments
 (0)