ํฐ์คํ ๋ฆฌ ๋ทฐ
https://choi95.tistory.com/175
Carousel Slide ๊ธฐ๋ฅ Component๋ก ๋ถ๋ฆฝ
Issue ์ Carousel Slide ๊ธฐ๋ฅ์ ํด๋น Main Page ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ Page ๋ด์์๋ ์ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฝํ ํ์๊ฐ ์์์ ํ์ธํ์๋ค. Carousel Slide ๊ธฐ๋ฅ์ด ๋ฆฌ์คํธ ํ์์์ ์ ๋๋ก ๋์ํ๊ธฐ
choi95.tistory.com


์ด์ ํฌ์คํ ์์ Carousel Slide ๊ธฐ๋ฅ ๋ด์ ์ฐ์ธ Feeds Layout์ ์ด 2๊ฐ์ด๋ค.
ํด๋น Layout ํ์์ Main Page ๋ด์์ ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ ๋ค๋ฅธ 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} />;
});
}
}
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ณ์ฐ๋ ์์ฑ๋ช ์ ์ด์ฉํ์ฌ inputHandler ํจ์ ํฉ์น๊ธฐ (0) | 2021.11.14 |
---|---|
ํน์ ๊ฐ์ Entry ์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ_Infinite Scroll (0) | 2021.11.14 |
Carousel Slide ๊ธฐ๋ฅ Component๋ก ๋ถ๋ฆฝ (0) | 2021.11.07 |
๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ(how / what) (0) | 2021.10.28 |
๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ_JSX ์์์ Inline-style์ ๋ํด (0) | 2021.10.28 |