๐Floodgate ๋ฐํ: React ๐์ฉ "๋ ๋ง์ด ๋ก๋"๊ตฌ์ฑ ์์
8191 ๋จ์ด reactjavascript
Floodgate๋ React.js์ ๋ํ "๋ ๋ง์ ๋ก๋"๊ตฌ์ฑ ์์๋ก, ๋๊ธฐ ์ค์ธ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ๋ฐ์ดํธํ๋ ๋ณต์ก์ฑ์ ์ทจํ๊ณ ์ด๋ฅผ ์ง๊ด์ ์ธ ๊ฒฝํ์ผ๋ก ์ ํํฉ๋๋ค. ๊ตฌ์ฑ์ ๋ํ ์ต์ํ์ ์ ๊ทผ ๋ฐฉ์์ ์ทจํฉ๋๋ค. ๋จ ํ๋์ ํ์ ์ํ๊ณผ render prop pattern์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ์ ์๊ณผ ๋ ๋๋ง ๋ฐฉ์์ ์ ๋ฐํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค.
Floodgate์ ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ์ ๋น ๋ฅด๊ฒ ์ดํด๋ณด๋ ค๋ฉด ์๋ ์๋ฅผ ํ์ธํ์ธ์.
import React from "react";
import Floodgate from "react-floodgate";
export default function LoadMore() {
const albums = ["For Emma, Forever Ago", "Bon Iver, Bon Iver", "22 a million", "i,i"];
return (
<Floodgate data={albums} initial={1} increment={1}>
{({ items, loadNext, loadComplete }) => (
<React.Fragment>
<h1>Bon Iver Albums</h1>
<ol>
{items.map(album => <li>{album}</li>)}
</ol>
<button onClick={loadNext} disabled={loadComplete}>Add Album</button>
</React.Fragment>
)}
</Floodgate>
);
}
์ด๊ฒ์ด ์๋ํ๋ "๋ ๋ก๋"๊ตฌ์ฑ ์์๋ฅผ ๋ง๋๋ ๋ฐ ํ์ํ ์ ๋ถ์ ๋๋ค!
์ง๊ธ Floodgate ์ฌ์ฉ์ ์์ํ๋ ค๋ฉด React ํ๋ก์ ํธ์ ์ค์นํ์ธ์.
# using npm
npm i react-floodgate
# using yarn
yarn add react-floodgate
ํน์ง
Floodgate๋ ์ต์ํ์ ๊ธฐ๋ฅ์ด์ง๋ง ๊ทธ ๊ธฐ๋ฅ์ด ๋ค๋ฅธ ๊ตฌ์ฑ ์์ ๋ฐ ํจํด๊ณผ ํจ๊ป ์ด๋ป๊ฒ ํ์ฉ๋๋์ง์ ๋ฐ๋ผ ์์ฒญ๋๊ฒ ๊ฐ๋ ฅํ ์ ์์ต๋๋ค. ์๋์์ Floodgate๊ฐ ํ ์ ์๋ ์์ ์ ๋ํ ๊ฐ๋ตํ ์๊ฐ๋ฅผ ํ์ธํ์ธ์. README file์ ํ์ธํ์ฌ ๋ ๊น์ ์ดํด์ ๊ธฐ์ ์ ์ธ ์ธ๋ถ ์ฌํญ์ ์ป์ผ์ญ์์ค.
๐ ๋ชจ๋ ์ ํ์ ๋ฐ์ดํฐ ์๋น
Floodgate์
data
์ํ์ ๋ฐฐ์ด์ด ์ ๋ฌ๋๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ ๋ฐฐ์ด์ ๋น์ด ์๋ ๊ฒ์ ํฌํจํ์ฌ ๋ฌด์์ด๋ ๋ ์ ์์ต๋๋ค! ๋ฌธ์์ด, ๊ตฌ๋ฌธ ๋ถ์๋ JSON ๊ฐ์ฒด, React ๊ตฌ์ฑ ์์, ์ฌ์ง์ด JavaScript ํจ์๋ ์ ๋ฌํ ์ ์์ต๋๋ค. Floodgate๋ ์ด๋ฌํ ํญ๋ชฉ์ ๋ ๋๋ง ๋ฐ ๊ตฌํ์ ๊ฐ๋ฐ์์๊ฒ ๋งก๊น๋๋ค.data={["hello", "world"]}
, data={[<li>Eggs</li>, <li>cereal</li>, <li>paper towels</li>]}
, data={[]}
์ ๊ฐ์ ๊ฐ์ ๋ชจ๋ Floodgate์ ์ ๋ฌํ๊ธฐ์ ์ ํจํฉ๋๋ค. ์ฐธ๊ณ ๋ก, Floodgate๋ ์ด๋ค ์ ํ์ ํญ๋ชฉ์ด ๋ฐฐ์ด์ ๊ตฌ์ฑํ๋์ง ์ ๊ฒฝ ์ฐ์ง ์์ง๋ง ๋ชจ๋ ๋ฐฐ์ด ์์์์ ์ ํ์ด ๊ท ์ผํ์ง ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.๐ข ๋ ๋๋งํ ํญ๋ชฉ์ ์๋ ๊ฒฐ์
Floodgate์
data
๋ฐฐ์ด์์ initial
์ํ์ ์ฌ์ฉํ์ฌ ์ด๊ธฐ ๋ ๋๋ง์ ๋ก๋ํด์ผ ํ๋ ํญ๋ชฉ ์๋ฅผ ์๋ ค์ค๋๋ค. increment
prop์ render prop ํจ์์์ loadNext()
์ ๋ํ ํ์ ํธ์ถ์์ ๋ก๋๋๋ ํญ๋ชฉ ์๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.๐ ์์ ๊ตฌ์ฑ ์์์์ ์ํ ๊ด๋ฆฌ
React์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋์ ์ฌ์ฉ์ ์ ์ ์ฝ๋ฐฑ ์ํ์ ํ์ฉํ๋ฉด Floodgate์ ์ํ์ ์์ ๊ตฌ์ฑ ์์์ ์ํ๋ก ์์ ํ ๊ด๋ฆฌํ ์ ์์ผ๋ฏ๋ก ์ธ์คํด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์์ผ๋ก ์ ๋ฐ์ดํธํ๊ฑฐ๋ ์ต์ข ์ฌ์ฉ์๊ฐ ๋ก๋๋๋ ํญ๋ชฉ ์๋ฅผ ๋ ์ ์ ์ดํ ์ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ Controlled Floodgate ํจํด์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
โ๏ธ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฝ๋ฐฑ ์ํ์ผ๋ก ์ด๋ฒคํธ ์ฒ๋ฆฌ
render prop ํจ์๋ ์์ ๊ตฌ์ฑ ์์์์ ํธ์ถํ Floodgate ๋ฉ์๋์ ์๋ฅผ ๋ ธ์ถํฉ๋๋ค. ์ฆ,
loadNext
, loadAll
, reset
๋ฐ exportState
์
๋๋ค. ์ด๋ฌํ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด Floodgate๋ on[MethodName]
์ํ์ ์ ๊ณต๋ ํจ์๋ฅผ ํธ์ถํฉ๋๋ค(์ ๊ณต๋ ๊ฒฝ์ฐ).๐ฎ ์ปจํ ์คํธ API ํ์ฉ
Floodgate๋ v0.6.0๋ถํฐ React์ Context API์ ํ์ฉํ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ
FloodgateContext
๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๊ณณ์ด๋ฉด ์ด๋๋ ์ง render prop์ ๋
ธ์ถ๋ ๋ฉ์๋๋ฅผ ์ ๋ฌํ ํ์๊ฐ ์์ต๋๋ค.๐ TypeScript๋ก ์ ์
Floodgate๋ Typescript๋ก ๊ตฌ์ถ๋์์ผ๋ฉฐ ํฅ์๋ ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ํด types definition file๊ณผ ํจ๊ป ๋ฐฐํฌ๋ฉ๋๋ค.
์
Floodgate๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ ์ ์ดํดํ๋ ค๋ฉด ๋ค์์ ํ์ธํ์ญ์์คCodesandbox.io examples. ์ฝ๋๊ฐ ์ค์ ๋๋ ๋ฐฉ์๊ณผ ์ต์ข ์ฌ์ฉ์๊ฐ ์ํธ ์์ฉํ ๊ฒฐ๊ณผ ์ฑ์ ๋ณผ ์ ์์ต๋๋ค.
์ฌ์ฉ ์ค์ธ Floodgate์ ์ค์ ์๋ ๋ด ๊ฐ์ธ ์ฌ์ดํธwriting page์ ์์ต๋๋ค.
๋ก๋๋งต
์ด ํ๋ก์ ํธ๋ ๋งค์ฐ ์นํ๊ฒฝ์ ์ด์ง๋ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ Floodgate ์ฌ์ฉ์์ ์ฆ๊ฐ์ ์ธ ์๊ตฌ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ ์ธ์๋ ๊ฐ๊น์ด ์ฅ๋์ ๊ตฌํํ ๊ณํ์ธ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
useFloodgate
) GitHub์์ ํ์
Floodgate๋ GitHubgeoffdavis92/react-floodgate์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ๊ตฌ์ฑ ์์์ README๋ฅผ ๋ณด๊ณ , ์์ค ํ์ผ์ ๊ฒ์ฌํ๊ณ , ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ๊ณ , ์ด๋ฆฐ ํ๋ก์ ํธ๋ฅผ ์ดํด๋ณด๊ณ , ๋ชจ๋ ์ผ๋ฐ์ ์ธ GitHub ๋ฆฌํฌ์งํ ๋ฆฌ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์ด๋ป๊ฒ ์๊ฐํด?
ํ๋ฌ๋๊ฒ์ดํธ ์ฑ์ด ๋ง์์ ๋์๋์? ์ฑ์ ์ด ๊ตฌ์ฑ ์์๊ฐ ์ ์คํ ํ์ํฉ๋๊น? ๊ทธ๊ฒ์ ๋ํด ์๋ ค์ฃผ๊ฑฐ๋ ์๋์ ์๊ฒฌ์ ๋จ๊ฒจ์ฃผ์ธ์!
๐ ํ๋ณตํ ๋ฐ์ ! ๐
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐Floodgate ๋ฐํ: React ๐์ฉ "๋ ๋ง์ด ๋ก๋"๊ตฌ์ฑ ์์), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/geoff/announcing-floodgate-a-load-more-component-for-react-3llpํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค