ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

https://choi95.tistory.com/175

 

Carousel Slide ๊ธฐ๋Šฅ Component๋กœ ๋ถ„๋ฆฝ

Issue ์œ„ Carousel Slide ๊ธฐ๋Šฅ์€ ํ•ด๋‹น Main Page ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ Page ๋‚ด์—์„œ๋„ ์“ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฝํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ์„ ํ™•์ธํ•˜์˜€๋‹ค. Carousel Slide ๊ธฐ๋Šฅ์ด ๋ฆฌ์ŠคํŠธ ํ˜•์‹์—์„œ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๊ธฐ

choi95.tistory.com

Feeds Layout

์ด์ „ ํฌ์ŠคํŒ…์—์„œ Carousel Slide ๊ธฐ๋Šฅ ๋‚ด์— ์“ฐ์ธ Feeds Layout์€ ์ด 2๊ฐœ์ด๋‹ค.

 

ํ•ด๋‹น Layout ํ˜•์‹์€ Main Page ๋‚ด์—์„œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ Page ๋‚ด์—์„œ๋„ ๊ณตํ†ต์ ์œผ๋กœ ์“ฐ์ธ๋‹ค.

Detail Page

์ด๋ฅผ ์œ„ํ•ด ์ž„์˜๋กœ Layout Type ๊ฐ’์„ props๋กœ ๋„˜๊ฒจ์ฃผ์–ด Type ๊ฐ’์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ˜•์‹์˜ Feeds List๊ฐ€ ์กฐ๊ฑด๋ถ€ ๋žœ๋”๋ง๋˜๋„๋ก ๋‹ค์Œ๊ณผ ๊ฐ™์ด MovieList ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•ด์ฃผ์—ˆ๋‹ค.

  static getDerivedStateFromProps(nextProps, prevState) {
    let { type, movieListData } = nextProps;
    let { curFeedsType } = prevState;
    if (!type) return null;
    if (type !== curFeedsType)
      return { curFeedsType: type, curMovieListData: movieListData };
  }

๋ผ์ดํ”„ ์‚ฌ์ดํด ๋ฉ”์„œ๋“œ ์ค‘ getDerivedStateFromProps()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋„˜๊ฒจ ์ค€ type ๊ฐ’์— ๋”ฐ๋ผ MovieList ๋‚ด์˜ state ๊ฐ’์— ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํ˜•์‹์˜ Data List์™€ ํ˜„์žฌ type๊ฐ’์„ ์ ์žฌํ•ด ์ฃผ์—ˆ๋‹ค.

 

๊ทธ ๋‹ค์Œ์œผ๋ก  ํ•ด๋‹น MovieList ์ปดํฌ๋„ŒํŠธ์˜ render() ๋ฉ”์„œ๋“œ์—์„œ state์— ์ €์žฅ๋œ type ๊ฐ’์— ๋งž์ถฐ์„œ map() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์กฐ๊ฑด๋ถ€ ๋žœ๋”๋ง์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

render() {
    let { curFeedsType, curMovieListData } = this.state;
	// curFeedsType์€ ํ˜„์žฌ ์ฐธ์กฐ๋˜๋Š” type ๊ฐ’, curMovieListData๋Š” ์ฐธ์กฐ๋œ type๊ฐ’์— ๋งž๋Š” DataList๊ฐ€ ์ €์žฅ
    if (this.isFeedsType(curFeedsType)) { 
    // type๊ฐ’์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์กฐ๊ฑด๋ถ€ ๋žœ๋”๋ง
      return curMovieListData.map(({ id, movieTitle, movieTear, url }) => {
        return (
          <SoleFeedLayout
            key={id}
            movieTitle={movieTitle}
            movieTear={movieTear}
            url={url}
          />
        );
      });
    } else {
      return curMovieListData.map(({ id, concept, urls }) => {
        return <CollectionFeedLayout key={id} concept={concept} urls={urls} />;
      });
    }
  }
๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2024/10   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ