[ReactNative] ์ ‘ํž˜ ํŽผ์นจ ๋ฒ„ํŠผ๊ณผ ์˜์—ญ ๋งŒ๋“ค๊ธฐ
728x90

Today, What I learned?

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค ๋ฎค์ง€์ปฌ์˜ ์ƒ์„ธ ์„ค๋ช… ์ด๋ฏธ์ง€๊ฐ€ ์ ‘๊ณ  ํŽผ์ณ์ง€๋Š” ๋ถ€๋ถ„์ด ํ•„์š”ํ–ˆ๋‹ค.

collapsible view ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ์žˆ๋Š” ๋“ฏํ–ˆ์ง€๋งŒ, ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์–ด์„œ state๋ฅผ ์ด์šฉํ–ˆ๋‹ค.

์ด ๊ณผ์ •์—์„œ ๊ฒช์—ˆ๋˜ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

 

์ ‘ํž˜, ํŽผ์นจ ๋ฒ„ํŠผ

์ ‘๊ณ  ํŽผ์ณ์ง€๋Š” ๋ถ€๋ถ„์€ ํŒ€์›๋ถ„์ด state๋กœ ์ž˜ ๊ตฌํ˜„ํ•ด ์ฃผ์…จ๋‹ค.

const [isMoreButton, setMoreButton] = useState(false);

isMoreButton์— ๋”ฐ๋ผ์„œ ์ด๋ฏธ์ง€๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ์˜์—ญ์ด ๋ณด์ด๊ณ  ๊ฐ์ถฐ์ง€๋„๋ก ํ–ˆ๋‹ค.

 {isMoreButton && (
        <MoreDetail width={SCREEN_WIDTH}>
          <DetailImg
            style={{ resizeMode: 'stretch' }}
            source={{
              uri: `${musicalData?.dbs?.db[0].styurls[0].styurl[0]}`,
            }}
          />
        </MoreDetail>
)}

์ฒ˜์Œ์— ์ € ์˜์—ญ์€ ๋ฎค์ง€์ปฌ ์ •๋ณด ์˜์—ญ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค๋ฅธ ์˜์—ญ์˜ ์ด๋ฏธ์ง€๊นŒ์ง€ ์นจ๋ฒ”ํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

 

๊ทธ๋ž˜์„œ ์ด๋ฏธ์ง€ ์˜์—ญ์„ ์•„์˜ˆ ์ปดํฌ๋„ŒํŠธ ๋ฐ”๊นฅ์œผ๋กœ ๋บ๋‹ค.

       <MoreButton
              onPress={() => {
                setMoreButton(!isMoreButton);
              }}
            >
              {isMoreButton ? (
                <TempText>์ ‘๊ธฐ</TempText>
              ) : (
                <TempText>์ƒ์„ธ๋ณด๊ธฐ</TempText>
              )}
            </MoreButton>
          </InfoPart>
        ))}
      </InfoTotalPart>

      {isMoreButton && (
        <MoreDetail width={SCREEN_WIDTH}>
          <DetailImg
            style={{ resizeMode: 'stretch' }}
            source={{
              uri: `${musicalData?.dbs?.db[0].styurls[0].styurl[0]}`,
            }}
          />
        </MoreDetail>
      )}

 

 

๋˜ ์ด๋ฏธ์ง€๊ฐ€ ์ตœ์†Œ ๋ช‡์ฒœ ํ”ฝ์…€์˜ ๊ธด ์ด๋ฏธ์ง€์ด๋‹ค ๋ณด๋‹ˆ ScrollView ์•ˆ์— ์žˆ์„ ๋•Œ ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š” ํ˜„์ƒ์ด ์žˆ์—ˆ๋‹ค.
์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ์— resize:: 'stretch' ๋ผ๋Š” ์†์„ฑ์„ ์ฃผ์–ด ์ด๋ฏธ์ง€ ์‚ฌ์ด์ฆˆ๋ฅผ ์ปจํŠธ๋กคํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 style={{ resizeMode: 'stretch' }}

 

 

๊ทธ๋ž˜์„œ View ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ์‹ธ๊ณ , ์™„์ „ํ•˜์ง„ ์•Š์ง€๋งŒ ๊ธฐ๊ธฐ๋ณ„ ๊ฐ€๋กœ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ ๋†’์ด๋ฅผ ์กฐ๊ธˆ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

const MoreDetail = styled.View`
  width: 90%;
  height: ${(props) =>
    props.width <= 375 ? SCREEN_HEIGHT * 8 + 'px' : SCREEN_HEIGHT * 9 + 'px'};
  padding: 10px 0;
  margin: 0 auto;
`;

 

 

์ตœ์ข…์ ์œผ๋กœ ์™„์„ฑ๋œ ๋ถ€๋ถ„์€ ์ด๋ ‡๋‹ค. ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ state๋กœ ๊ตฌํ˜„ํ•œ ์ ์— ๋งŒ์กฑ์Šค๋Ÿฝ๋‹ค! 

 

 

 

728x90