ํฐ์คํ ๋ฆฌ ๋ทฐ
https://choi95.tistory.com/175
์ด์ ํฌ์คํ ์์ 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 |