現在、Reactでのwebサイト制作をしております。
困っている点として、表示したい配列データのindexの前半のみを表示する領域と
indexの後半のみを表示する領域で別々で表示してあげたいです。
また、こちらの二つをflexで2列にするのですが、必ず左側を1つ多く表示させたいです。
1.左用、右用にそれぞれmapを回して一旦配列の全データを2個出力
2.左ではindexの総数の半分以下のデータが表示されるようにする
3.右ではindexの総数の半分以上のデータが表示されるようにする
※総数が奇数の場合は左に寄せる、偶数の場合は半々にする
この2.3の工程の式をご教授いただければ幸いです。
parentComponent.tsx
1import { Accordion } from "src/components/layouts/common/accordionQuestion"; 2import "react-responsive-carousel/lib/styles/carousel.min.css"; 3 4const accordionItems = { 5 accordionList: [ 6 { 7 title: "", 8 text: "", 9 }, 10 { 11 title: "", 12 text: "", 13 }, 14 { 15 title: "", 16 text: "", 17 }, 18 { 19 title: "", 20 text: "", 21 }, 22 { 23 title: "", 24 text: "", 25 }, 26 { 27 title: "", 28 text: "", 29 }, 30 { 31 title: "", 32 text: "" 33 }, 34 { 35 title: "", 36 text: "", 37 }, 38 { 39 title: "", 40 text: "" 41 }, 42 { 43 title: "", 44 text: "", 45 }, 46 { 47 title: "", 48 text: "", 49 }, 50 ], 51}; 52 53export function Page() { 54 return ( 55 <div> 56 <Accordion accordionList={accordionItems.accordionList} /> 57 </div> 58 ); 59} 60
childComponent.tsx
1import classes from "./index.module.scss"; 2import React from "react"; 3import { AccordionQuestionData } from "src/components/layouts/common/accordionQuestionData"; 4 5interface accordionData { 6 title: string; 7 text: string; 8} 9interface Props { 10 accordionList: accordionData[]; 11} 12 13export const Accordion: React.VFC<Props> = React.memo(function AccordionItem( 14 props: Props 15) { 16 return ( 17 <div className={classes.position}> 18 <h3 className={classes.title}>よくある質問</h3> 19 <div className={classes.flexBox}> 20 <div className={classes.flex}> 21 {[...props.accordionList].map((items, index) => { 22 if(index) { 23 return ( 24 <AccordionQuestionData 25 key={index} 26 title={items.title} 27 text={items.text} 28 /> 29 ); 30 } 31 })} 32 </div> 33 <div className={classes.flex}> 34 {[...props.accordionList].map((items, index) => { 35 if(index) { 36 return ( 37 <AccordionQuestionData 38 key={index} 39 title={items.title} 40 text={items.text} 41 /> 42 ); 43 } 44 })} 45 </div> 46 </div> 47 </div> 48 ); 49}); 50
回答1件
あなたの回答
tips
プレビュー