1- import React from "react" ;
1+ import React , { useCallback , memo } from "react" ;
22import { useGlobalContext } from "./Context" ;
33
44const 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