質問するログイン新規登録
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

1回答

1983閲覧

TypeScriptにて表のセル結合を綺麗に表示したい。

blueky

総合スコア2

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2023/04/21 14:57

編集2023/04/21 15:01

0

0

TypeScript(フレームワークはReact)でテーブルを表示したいです。
そして一部カラムのデータを結合したいです。

前提:recordsは8レコードあるとする。

rowSpanを使用するのだと思っていますが、表全体がずれてしまいます。
例えば、カラム2でrowSpan={2}としても、↓画像のようになってしまいます。
イメージ説明

イメージとしては、↓画像のようにずれることなく2行分結合したいです。
イメージ説明
ところがrecordsが8あるのできっちりデータ2も8回表示され全体がずれてしまうのです。
これを回避する方法はありますでしょうか?
もっといえば、最終的には↓画像のように結合する行を色々設定したいです。
イメージ説明

<TableBody> <> {records.map((t) => { return ( <TableRow key={t.Id}> {/* カラム1 */} <TableCell>{t.name}</TableCell> {/* カラム2 */} <TableCell rowSpan={2}> <Box>{t.text}</Box> </TableCell> {/* カラム3 */} <TableCell> <Box>{t.age}</Box> </TableCell> </TableRow> ); })} </> </TableBody>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

blueky

2023/04/21 14:59

追記:イメージ画像のデータ部は ×カラム2 〇データ2です。
hoshi-takanori

2023/04/21 15:01

カラム2を2行分結合したいなら、2行おきに出力する必要があるでしょうね。
blueky

2023/04/22 04:53

なるほど、まとめて出力するよりインプットのrecordsの8を分割する感じってことですかね? その場合どのように記述するのが吉でしょうか…?
guest

回答1

0

こんな感じでしょうか。

tsx

1type Record = { 2 Id: number; 3 name: string; 4 rows: number; 5 text: string; 6 age: number; 7}; 8 9const records: Record[] = [ 10 { Id: 1, name: 'a-1', rows: 5, text: 'aaa', age: 12 }, 11 { Id: 2, name: 'a-2', rows: 0, text: '', age: 23 }, 12 { Id: 3, name: 'a-3', rows: 0, text: '', age: 34 }, 13 { Id: 4, name: 'a-4', rows: 0, text: '', age: 45 }, 14 { Id: 5, name: 'a-5', rows: 0, text: '', age: 56 }, 15 { Id: 6, name: 'b-1', rows: 1, text: 'bbb', age: 67 }, 16 { Id: 7, name: 'c-1', rows: 2, text: 'ccc', age: 78 }, 17 { Id: 8, name: 'c-2', rows: 0, text: '', age: 89 }, 18]; 19 20function App() { 21 return ( 22 <Table> 23 <TableBody> 24 {records.map((t) => { 25 return ( 26 <TableRow key={t.Id}> 27 {/* カラム1 */} 28 <TableCell>{t.name}</TableCell> 29 {/* カラム2 */} 30 { 31 t.rows > 0 && ( 32 <TableCell rowSpan={t.rows}> 33 <Box>{t.text}</Box> 34 </TableCell> 35 ) 36 } 37 {/* カラム3 */} 38 <TableCell> 39 <Box>{t.age}</Box> 40 </TableCell> 41 </TableRow> 42 ); 43 })} 44 </TableBody> 45 </Table> 46 ); 47}

投稿2023/04/23 10:36

hoshi-takanori

総合スコア7903

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問