Map関数を使用して繰り返しとインタフェースpropsを定義する
15764 ワード
react-slickを利用してスライダを作り、react-avatarを使ってアイコンと名前を作りたいです.Instagramの物語のようです.react-avatarを使用して1つのデータをmap関数で画面に表示するのは順調ですが、複数のデータが入ると重複性がブロックされます.明らかにmap関数を用いることは正しいが,種々の挿入を試みても解けず,キーを交換しても解けなかった.
これには理由がある.New Componentでスライダを解放し、プロファイルデータはLiveBroadCastで定義し、Profileでの一時データはNew Componentで定義し、LiveBroadCastではTypeを指定していないので解放できません.後でインタフェースでタイプを指定するのを忘れないでください!
<実装コード> LiveBroadCast.tsx NewComponent.tsx
これには理由がある.New Componentでスライダを解放し、プロファイルデータはLiveBroadCastで定義し、Profileでの一時データはNew Componentで定義し、LiveBroadCastではTypeを指定していないので解放できません.後でインタフェースでタイプを指定するのを忘れないでください!
<実装コード>
import Avatar from 'react-avatar';
import styled from 'styled-components';
import NewComponent from './Category/NewComponent';
// interface로 타입지정해주는거 까먹지말기!!!
interface ProfileImage {
profile: {
imageUrl: string;
name: string;
};
}
const LiveBroadCastWrapper = styled.div `
/* position: absolute; */
width: 375px;
height: 164px;
margin-top: 9px;
/* background: #1E1E1E; */
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.25);
`;
const InfluencerProfileWrapper = styled.div `
position: absolute;
width: 73px;
height: 110px;
margin-top: 54px;
margin-bottom: 11px;
margin-left: 17px;
`;
const InfluencerImage = styled.div `
/* display: flex; */
width: 73px;
height:73px;
border: 3px solid #FF8686;
box-sizing: border-box;
background: #FFFFFF;
border-radius: 50%;
`;
const InfluencerName = styled.div `
position: absolute;
width: 100px;
height: 22px;
margin-top: 4px;
margin-left: 22px;
font-style: normal;
font-weight: normal;
font-size: 13px;
line-height: 22px;
display: flex;
align-items: center;
text-align: center;
letter-spacing: -0.0241176em;
color: #999999;
`;
// <> 안에는 interface로 선언한 Props이름 ({})안에는 Props로 받고자하는 속성 값
const LiveBroadCast: React.FunctionComponent<ProfileImage> = ({profile}) => {
return (
<LiveBroadCastWrapper>
<InfluencerProfileWrapper>
<InfluencerImage>
<Avatar alt="Influencer_ProfileImage" src={profile.imageUrl} size="66.5" round={true}/>
</InfluencerImage>
<InfluencerName>{profile.name}</InfluencerName>
</InfluencerProfileWrapper>
</LiveBroadCastWrapper>
);
}
export default LiveBroadCast;
const profile = [
{
imageUrl: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ1f-bdyCIMuT2XOfBqr2KUE24QOAYGK9cBFA&usqp=CAU",
name: "엘린"
},
{
imageUrl: "https://yt3.ggpht.com/ytc/AAUvwnjRgXQ8cfs4tQ88D_QskjxMQgWS8uFQg4MhxKxW=s900-c-k-c0x00ffffff-no-rj",
name: "레이디"
},
{
imageUrl: "https://fpost.co.kr/board/data/editor/1902/73f13ad6d5f5126be936fc9035fddf68_1549853437_9992.jpg",
name: "최겨울"
},
{
imageUrl: "https://static.news.zumst.com/images/108/2019/04/30/6c6b7afa729f4288ac6160b50a7a69e4.jpg",
name: "세리"
},
{
imageUrl:"https://yt3.ggpht.com/ytc/AAUvwnjydzAF-kQIfLTJ5gLy685dWiw4g0_rRF2Zk8DGrA=s900-c-k-c0x00ffffff-no-rj",
name: "쩡대"
},
];
const NewComponent: React.FunctionComponent<ProductState> = ({items}) => {
.
.
.
.
.
.
.
return (
<>
<TopCarousel items={productCarouselItem} />
<Title>라이브방송</Title>
<Slider {...settings}>
// 여기서 첫 번째 profile은 위에서 정의한 데이터들을 Map 함수로 반복하기 위한 역할
// 두 번째, 세 번째 profile은 LiveBroadCast.tsx에서 정의한 ProfileImage interface의 profile
{profile.map((profile) => {
return(
<LiveBroadCast profile={profile} />
)
})}
</Slider>
<Items>
{items &&
items.map((item, i) => {
return <ProductCard item={item}></ProductCard>;
})}
</Items>
<GridList cols={2}>
{items.map((item, i) => {
return(
<GridListTile>
<ProductCard item={item}></ProductCard>
</GridListTile>
)
})}
</GridList>
</>
);
};
export default NewComponent;
Reference
この問題について(Map関数を使用して繰り返しとインタフェースpropsを定義する), 我々は、より多くの情報をここで見つけました https://velog.io/@seunghwa17/Map-함수-이용한-반복-interface-props-정의テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol