1. ๋ก์ง
2. ์ฝ๋๋ฆฌ๋ทฐ
(1) ํ์ดํ์ Onpress ๊ธฐ๋ฅ ๋ด๋ถ ๊ตฌํ
filteredImage ์ ์ธ ์ดํ์ ์ ์ด์ค์ผ ํ๋ค.
์๋ํ๋ฉด ์ปดํ์ผ์ ์์์๋ถํฐ ์์๋๋ก ์ฝ๊ธฐ ๋๋ฌธ์, ์ ์ธ๋ถ ๋ณด๋ค ํธ์ถ์ ๋จผ์ ํด์ ์ฌ์ฉํ๋ฉด ์๋ฌ๊ฐ ์ผ์ด๋๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ๋ด์ฉ์ ๋ณด๋ฉด
previousImageIdx๋ nextImageIdx๊ฐ ๊ฐ๊ฐ 0๋ณด๋ค ์๊ฑฐ๋ ๋ฐฐ์ด ๋ ๊ฐ๋ณด๋ค ์ปค์ง๋ ๊ฒฝ์ฐ, -1์ด ๋๋ ๊ฒฝ์ฐ ํด๋น ๊ธฐ๋ฅ์์ ๋ ์ด์ ์๋ฌด๊ฒ๋ ํ์ง ์๊ณ ๊ทธ๋ฅ ๋ฐํ ํ๋ผ๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ ์ด์ฃผ์๋ค.
๋ถ๋ช ๋ฐ์์๋ ํ ๊ฒ์ด์ง๋ง, ๋ฐฐ์ด์ ์ ๋์ผ๋ก ๊ฐ์ ๋, ํ์ดํ๋ฅผ ์ง์๋ฒ๋ฆฌ๋ ๋ก์ง์ ๋ฃ์ด์คฌ๋๋ฐ๋, ๋ฐฑ์๋์ ๋ถ๋ถ์์ ํ๋ฒ ๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์๋ค. ์ด๋ 2์ค ๋ณด์๊ณผ ๊ฐ์ด ์๊ธธ ์ ์๋ ์์ธ๋ฅผ ์์ฒ ์ฐจ๋จํ๊ธฐ ์ํจ์ด๋ค.
nextImageIdx์์ index๊ฐ -1์ธ ๊ฒฝ์ฐ์ ๋ฐฐ์ด์ ๋งจ ๋ idx๋ณด๋ค ํฐ ๊ฒฝ์ฐ ๋ชจ๋ ์์ธ์ฒ๋ฆฌ ํด์ฃผ์๋ค. ๊ทธ ์ด์ ๋ ๋ฐฐ์ด์ ์์๊ฐ ์๋ ๊ฐ์ index๋ฅผ ์ฐพ์ผ๋ ค ํ ๋ findIndex ํจ์๊ฐ ๋ฐํํ๋ ๊ฐ์ด -1์ด๋ผ์ ์ด๋ค. ๊ทธ๋์ 2๊ฐ์ง ๊ฒฝ์ฐ ๋ชจ๋ ์์ธ์ฒ๋ฆฌ ํด์ฃผ์๋ค.
๋ถ๋ช ์์ ํ์ดํ ์๋ ๋ก์ง์ ์ด๋ฏธ์ง ๋ฆฌ์คํธ์ ์ ๋์์ ์๋ํ์ง ์๋๋ค. ์๋ํ๋ฉด, ๋ฐ์ ๋ก์ง์์ ํ๊ฒ ์ง๋ง, ๋ฆฌ์คํธ์ ์ ๋์์ ํ์ดํ๋ฅผ ์ง์๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ ์ด์ ์๋ํ ๊ธธ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์์ฒ๋ผ ํญ์ ์ด์ค์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ํ์ฌ ํน์๋ผ๋ ์๊ธธ ์ ์๋ ์์ธ์ํฉ์ ๋ฏธ์ฐ์ ๋ฐฉ์งํ๋ ๊ฒ์ด ์ข๋ค.
(2) ๋งจ ์ฒ์ ์ด๋ฏธ์ง ์ ํ ์ ์ผ์ชฝ ํ์ดํ ์ง์ฐ๊ธฐ, ๋ ๋งจ ๋ ์ด๋ฏธ์ง ์ ํ ์ ์ค๋ฅธ์ชฝ ํ์ดํ ์ง์ฐ๊ธฐ ๋ก์ง
disalbed ์์ showPreviousArrow๋ฅผ ํ ๊ธ ์์ผฐ๋ค. ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
showPreviousArrow๋ ์ด๋ฏธ์ง์ index๊ฐ 0์ด๋ฉด false ( 'ํ์ดํ๋ฅผ ๋ณด์ฌ์ฃผ์ง ์๋๋ค.'์ ์๋ฏธ)
์๋ ๊ฒฝ์ฐ์ด๋ฉด true ('ํ์ดํ๋ฅผ ๋ณด์ฌ์ค๋ค'์ ์๋ฏธ) ์ด๋ค.
disalbed๋ true์ผ ๋ Touch๊ฐ ๋ถ๊ฐ๋ฅ ํ๊ณ , false์ผ๋ touch๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
index๊ฐ 0์ผ ๋ ํฐ์น๊ฐ ๋ถ๊ฐ๋ฅํ๊ณ , ์๋ ๋ ํฐ์น๊ฐ ๊ฐ๋ฅํด์ผ ํจ์ผ๋ก,
showPreviousArrow === true ์ผ๋ , disabled === false, showPreviousArrow === false ์ผ๋ disabled === true ๊ฐ ๋์ด์ผ ํจ์ผ๋ก toggle ๋์ด์ผ ํ๋ค.
** disalbe ์์ฑ ์ฌ์ฉ ๋์ ์ ์กฐ๊ฑด๋ฌธ ์ฌ์ฉํ๋ฉด ์๋๋์?
{showNextArrow && (
<ArrowButton iconName={"arrow-right"} onPress={onPressRightArrow} />
์ฒ์์๋ ์ด๊ฑธ ์ผ๋๋ฐ, ์ด๋ฌ๋ฉด ํด๋น ํ์ดํ๊ฐ ์๋ ๊ณต๊ฐ๊น์ง
๋ค ๋น์์ง๊ธฐ ๋๋ฌธ์, ํ๋ฉด ๋ด์ฉ์ด ํ์ดํ ์๋ ๊ณต๊ฐ์ผ๋ก ์ ๋ฆฐ๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ์์ ๋ก์ง๋ณด๋ค๋
TouchableOpacity์ disabled๋ color = transparent๋ฅผ
์ด์ฉํ์ฌ ๊ณต๊ฐ์ ์ฐจ์ง ํ๋ ์ ๋ณด์ด๋๋ก ๋ง๋ค์ด์ค๋ค.
** ์ฌ์ฉ์๊ฐ ๋งจ ์ฒ์ ์ด๋ฏธ์ง๋ฅผ ๋๋ฅผ ๊ฒฝ์ฐ, ์๋ ํ์ดํ๊ฐ ์๋ ์์ญ์ ์ ๋ณด์ผ ๋ฟ์ด์ง ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ ์์ต๋๋ค. ๊ทผ๋ฐ ํ์ดํ๊ฐ ์๋ ๊ณต๊ฐ์ ๋๋ฌ๋ ๋ถ๋ชจ pressable์ onPress ๊ธฐ๋ฅ์ธ BackDrop(๋ชจ๋ฌ์ด ๊บผ์ง๋ ๋ก์ง)์ด ์คํ๋๋ ๋ฐ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
์๋๋ ํ์ดํ ๋ก์ง์ด ์ ์ฒด Pressable์ ์์ ํ๊ทธ์ฌ์ ํ์ดํ ๋ก์ง์ onPress ๊ธฐ๋ฅ์ด ๋ถ๋ชจ Pressable์ ๊ฒ๋ณด๋ค ์ฐ์ ์์๋ฅผ ๊ฐ์ก๋ค. ๊ทผ๋ฐ ํ์ดํ ๋ก์ง์ touchableOpacity๊ฐ disalbed ๋๋ฉด์ onPress ๊ธฐ๋ฅ์ ์์คํ๋ค!
๋ฐ๋ผ์ ํ์ดํ ๋ก์ง์์ญ์ ๋๋ฅด๋ฉด ์ฐจ์์ ์๋ ๋ถ๋ชจ Pressable์ onPress๊ธฐ๋ฅ์ด ์๋๋๋ค.
3. ์๋กญ๊ฒ ์๊ฒ ๋ ๋ด์ฉ ์ ๋ฆฌ
๋ฐฐ์ด์ ํจ์์ธ findIndex๋?
๋ฐฐ์ด.findIndex()์ ()์์ ๋ง์กฑํ๋ ์ฒซ๋ฒ์งธ ์์์ index๋ฅผ ๋ฐํํ๋ค.
const array1 = [5, 12, 8, 130, 44];
const isLargeNumber = (element) => element > 13;
console.log(array1.findIndex(isLargeNumber));
// Expected output: 3
ํด๋น ๊ฒฝ์ฐ 130์ด ์ฒ์์ผ๋ก isLargeNumber ๋ก์ง์ ๋ง์กฑํ๋ ์์์ด๋ฏ๋ก ํด๋น ์์์ index์ธ 3์ด ์ถ๋ ฅ๋๋ค.