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

回答編集履歴

2

追記

2021/11/18 02:04

投稿

hoshi-takanori
hoshi-takanori

スコア7903

answer CHANGED
@@ -30,4 +30,70 @@
30
30
  </div>
31
31
  ))}
32
32
  </div>
33
+ ```
34
+
35
+ ---
36
+
37
+ 例えばこんな感じでしょうか。(タグは適当です。)
38
+
39
+ ```jsx
40
+ function App() {
41
+ const data = [
42
+ {
43
+ "id": "1",
44
+ "contents": [
45
+ {
46
+ "type": "definition",
47
+ "content": "題名1"
48
+ },
49
+ {
50
+ "type": "image",
51
+ "content": "hoge1.jpg"
52
+ },
53
+ {
54
+ "type": "text",
55
+ "content": "テキスト"
56
+ },
57
+ {
58
+ "type": "image",
59
+ "content": "hoge2.jpg"
60
+ }
61
+ ],
62
+ "images": [
63
+ {
64
+ "src": "hoge1.jpg",
65
+ "imageUrl": "https://xxx/hoge1.jpg"
66
+ },
67
+ {
68
+ "src": "hoge2.jpg",
69
+ "imageUrl": "https://xxx/hoge2.jpg"
70
+ }
71
+ ]
72
+ }
73
+ ];
74
+
75
+ const findImageUrl = (images, content) => {
76
+ return images.find(image => image.src == content).imageUrl;
77
+ };
78
+
79
+ return (
80
+ <div>
81
+ {data.map(item => (
82
+ <div key={item.id}>
83
+ {item.contents.map(({ type, content }) => {
84
+ switch (type) {
85
+ case "definition":
86
+ return <h1>{content}</h1>;
87
+ case "text":
88
+ return <p>{content}</p>;
89
+ case "image":
90
+ const imageUrl = findImageUrl(item.images, content);
91
+ return <Image src={imageUrl} width="100" height="100" />;
92
+ }
93
+ })}
94
+ </div>
95
+ ))}
96
+ </div>
97
+ );
98
+ }
33
99
  ```

1

追記

2021/11/18 02:04

投稿

hoshi-takanori
hoshi-takanori

スコア7903

answer CHANGED
@@ -1,4 +1,4 @@
1
- > 複数ある場合は全部表示させたいです。
1
+ > 複数ある場合は全部表示させたいです。
2
2
  > 0個の場合は、何も表示させません。
3
3
 
4
4
  なら普通に map すれば良いかと。
@@ -9,4 +9,25 @@
9
9
  <Image key={index} src={image.imageUrl} width="100" height="100" />
10
10
  ))}
11
11
  </div>
12
+ ```
13
+
14
+ ---
15
+
16
+ > 意図している表示は↓
17
+ > テキスト
18
+ > 画像1
19
+ > テキスト
20
+ > 画像2
21
+
22
+ ということなら map の中にテキストを入れれば良いでしょう。
23
+
24
+ ```jsx
25
+ <div>
26
+ {content.images.map((image, index) => (
27
+ <div key={index}>
28
+ <p>テキスト</p>
29
+ <Image src={image.imageUrl} width="100" height="100" />
30
+ </div>
31
+ ))}
32
+ </div>
12
33
  ```