๊ฐœ๋ฐœ ๊ณต๋ถ€/๋ฐ๋ธŒ์ฝ”์Šค TIL

[ํด๋ผ์šฐ๋”ฉ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—”์ง€๋‹ˆ์–ด๋ง TIL] 240401 - SNS ์•ฑ ํด๋กœ๋‹ ํ”„๋กœ์ ํŠธ (3)

๊ฐ€์šค์ด 2024. 4. 1. 20:51

Intro


ํ”„๋กœ์ ํŠธ ๋งˆ์ง€๋ง‰๋‚ !

์ฃผ๋ง๊ณผ ์˜ค๋Š˜๊นŒ์ง€ ํ”ผ๋“œ ๊ฒ€์ƒ‰ & ํ”ผ๋“œ ๊ฒŒ์‹œ๊ธ€ ์˜ฌ๋ฆฌ๋Š” ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

 

 

 

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์‚ฌํ•ญ


ํ”ผ๋“œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ

 

ํƒœ๊ทธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

๊ฒ€์ƒ‰์–ด์™€ ๊ฐ™์€ ํƒœ๊ทธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ํ”ผ๋“œ๋งŒ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณด์—ฌ์ค€๋‹ค.

๊ฒฐ๊ณผ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด๋Š” ๊ฐ€์žฅ ์ตœ๊ทผ์— ๊ฒ€์ƒ‰ํ•œ ํ‚ค์›Œ๋“œ๊ฐ€ ๋งจ ์œ„์— ์˜ค๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Set์„ ์‚ฌ์šฉํ•ด ์ค‘๋ณต์„ ์—†์• ์ฃผ์—ˆ๋‹ค.

 

 

ํ”ผ๋“œ ์ƒˆ๊ธ€ ์ž‘์„ฑ & ์‚ฌ์ง„ ์˜ฌ๋ฆฌ๊ธฐ

react-native-camera-roll ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ธ๋“œํฐ์˜ ์‚ฌ์ง„ ์•ฑ์— ์ ‘๊ทผํ•˜์—ฌ ์‚ฌ์ง„์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

const fetchImages = () => {
    CameraRoll.getPhotos({
      first: 100,
    }).then(res => {
      setImages(res.edges.map(e => e.node.image));
    });
  };

 

CameraRoll์˜ getPhotos ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์นด๋ฉ”๋ผ ์•จ๋ฒ” ์‚ฌ์ง„๋“ค์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

first๋Š” ์ตœ๊ทผ n๊ฐœ์˜ ์‚ฌ์ง„์„ ๊ฐ€์ ธ์˜ค๊ฒ ๋‹ค๋Š” ์˜ต์…˜์ด๋‹ค.

 

 

 

์—ฌ๋Ÿฌ ์‚ฌ์ง„์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ณ  ์„ ํƒํ•œ ์‚ฌ์ง„์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํŠผ๋„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

์„ ํƒํ•œ ์‚ฌ์ง„์€ ์Šฌ๋ผ์ด๋“œ ํ˜•์‹์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์ง„์„ ์„ ํƒํ•œ ํ›„ ๋‹ค์Œ์„ ๋ˆ„๋ฅด๋ฉด ์ƒˆ ๊ฒŒ์‹œ๋ฌผ ๋‚ด์šฉ๊ณผ ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

 

 

 

ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ

๐Ÿ“ฆsrc
 โ”ฃ ๐Ÿ“‚apis
 โ”ƒ โ”— ๐Ÿ“œdummyData.js
 โ”ฃ ๐Ÿ“‚assets
 โ”ƒ โ”— ๐Ÿ“œlogo.png
 โ”ฃ ๐Ÿ“‚components
 โ”ƒ โ”ฃ ๐Ÿ“œCommentsModal.tsx
 โ”ƒ โ”ฃ ๐Ÿ“œCustomBottomTab.tsx
 โ”ƒ โ”ฃ ๐Ÿ“œPageHeader.tsx
 โ”ƒ โ”— ๐Ÿ“œRenderFeed.tsx
 โ”ฃ ๐Ÿ“‚pages
 โ”ƒ โ”ฃ ๐Ÿ“œCalendarPage.tsx
 โ”ƒ โ”ฃ ๐Ÿ“œChatPage.tsx
 โ”ƒ โ”ฃ ๐Ÿ“œHome.tsx
 โ”ƒ โ”ฃ ๐Ÿ“œMyPage.tsx
 โ”ƒ โ”ฃ ๐Ÿ“œNewPostDetailPage.tsx
 โ”ƒ โ”ฃ ๐Ÿ“œNewPostPage.tsx
 โ”ƒ โ”ฃ ๐Ÿ“œSearchPage.tsx
 โ”ƒ โ”ฃ ๐Ÿ“œSearchResult.tsx
 โ”ƒ โ”— ๐Ÿ“œSplash.tsx
 โ”ฃ ๐Ÿ“‚types
 โ”ƒ โ”— ๐Ÿ“œtypes.ts
 โ”ฃ ๐Ÿ“‚utils
 โ”ƒ โ”— ๐Ÿ“œsetAgoDays.ts
 โ”— ๐Ÿ“œrouter.tsx

 

 

 

 

๋งˆ๋ฌด๋ฆฌ


์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„  ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๊ธฐ๋Šฅ๋“ค์„ ์™„์ „ํžˆ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„์ž…ํ–ˆ๋‹ค๋Š” ์ ์— ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์„ ์–ธํ•˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์™ธ๋ถ€ ํƒ€์ž…์„ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€๊ณผ ๊ท€์ฐฎ์Œ์„ ๋А๊ผˆ์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง„ํ–‰๋ ์ˆ˜๋ก ์ด๋Ÿฌํ•œ ๊ณผ์ •์ด ์ดˆ๊ธฐ ์˜ค๋ฅ˜๋ฅผ ์žก๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ๋‹ค.

 

 

์˜ˆ๋ฅผ๋“ค์–ด, ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๊ฐ€ ์‹ค์ˆ˜๋กœ length๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜์„ ๋•Œ JS๋Š” ์˜ค๋ฅ˜ ์—†์ด ๋™์ž‘ํ•˜๋Š” ๋ฐ˜๋ฉด TS์—์„œ๋Š” ํƒ€์ž… ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

ts ์˜ˆ์‹œ

 

js ์˜ˆ์‹œ

 

์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋“ค์„ ์‚ฌ์ „์— ์ฐพ์•„ ํ•ด๊ฒฐํ•˜์—ฌ ์ฝ”๋“œ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ชจ๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.