質問編集履歴

4

タイトルの変更

2020/02/21 02:53

投稿

lisateratail
lisateratail

スコア7

test CHANGED
@@ -1 +1 @@
1
- Reactでiframeを使いたい
1
+ Reactでiframeを使いたい(解決済み 成功コード追記)
test CHANGED
File without changes

3

成功したので、成功したコードを追記

2020/02/21 02:53

投稿

lisateratail
lisateratail

スコア7

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- [想定している動き]
5
+ #### 想定している動き
6
6
 
7
7
  下記のようなページで、左側の「rakuten」や「amazon」の文字列をhoverしたときに、
8
8
 
@@ -14,16 +14,14 @@
14
14
 
15
15
 
16
16
 
17
+
18
+
17
- 下記のようにコードを書いてみましたが、
19
+ #### 下記のようにコードを書いてみましたが、
18
20
 
19
21
  `Expected an assignment or function call and instead saw an expression no-unused-expressions`
20
22
 
21
23
  というエラーになってしまいます。
22
24
 
23
-
24
-
25
- コード↓
26
-
27
25
  ```React
28
26
 
29
27
  import React from 'react';
@@ -151,3 +149,139 @@
151
149
  想定している動きを実現させるためにはどのような方法がありますでしょうか?
152
150
 
153
151
  アドバイスいただけますと嬉しいです。
152
+
153
+
154
+
155
+ #### → 想定した動きを実現できました
156
+
157
+ 新しいコンポネントを作り直してしまったので、上記のコードと大分変わってしまいましたが、
158
+
159
+ 「文字列をhoverしたときに、iframe内にそれぞれのwebサイトが表示されるように」できました。
160
+
161
+ また、jsonファイルはsrc配下に別ファイルとして持たせています。
162
+
163
+ ```React
164
+
165
+ import React from 'react';
166
+
167
+ import data from './sample.json';
168
+
169
+
170
+
171
+ const Show = ({ title, url, isOpen, onMouseOver }) => (
172
+
173
+ <div>
174
+
175
+ <p onMouseOver={onMouseOver}>{title}</p>
176
+
177
+ {isOpen && <iframe src={url}/>}
178
+
179
+ </div>
180
+
181
+ );
182
+
183
+
184
+
185
+ class App extends React.Component {
186
+
187
+ constructor(props){
188
+
189
+ super(props);
190
+
191
+ this.json = data;
192
+
193
+ this.state={
194
+
195
+ openIds: []
196
+
197
+ }
198
+
199
+ this.handleChange = this.handleChange.bind(this);
200
+
201
+ }
202
+
203
+ handleChange(id){
204
+
205
+ let { openIds } = this.state;
206
+
207
+ openIds = openIds.includes(id) ? openIds.filter(e => e !== id) : [...openIds, id];
208
+
209
+ this.setState({ openIds });
210
+
211
+ }
212
+
213
+ render(){
214
+
215
+ return(
216
+
217
+ <div>
218
+
219
+ {this.json.map(q => (
220
+
221
+ <Show
222
+
223
+ key={q.id}
224
+
225
+ title={q.title}
226
+
227
+ url={q.url}
228
+
229
+ isOpen={this.state.openIds.includes(q.id)}
230
+
231
+ onMouseOver={() => { this.handleChange(q.id); }}
232
+
233
+ />
234
+
235
+ ))}
236
+
237
+ </div>
238
+
239
+ )
240
+
241
+ }
242
+
243
+ }
244
+
245
+ export default App;
246
+
247
+ ```
248
+
249
+
250
+
251
+ ```json
252
+
253
+ [
254
+
255
+ {
256
+
257
+ "id": "1",
258
+
259
+ "title": "Green RGBA model",
260
+
261
+ "url": "http://www.flatuicolorpicker.com/green-rgba-color-model"
262
+
263
+ },
264
+
265
+ {
266
+
267
+ "id": "2",
268
+
269
+ "title": "HTML color code",
270
+
271
+ "url": "https://html-color-codes.info/japanese/"
272
+
273
+
274
+
275
+ }
276
+
277
+
278
+
279
+ ]
280
+
281
+ ```
282
+
283
+
284
+
285
+ 出力はこんな感じです。
286
+
287
+ ![イメージ説明](00215bc6435566ab18666078b672e839.png)

2

ShowCase内に`title={title}`を追記

2020/02/21 02:50

投稿

lisateratail
lisateratail

スコア7

test CHANGED
File without changes
test CHANGED
@@ -64,7 +64,7 @@
64
64
 
65
65
  <p>{title}</p>
66
66
 
67
- {isOpen && <iframe class='showcase' src={content}></iframe>}
67
+ {isOpen && <iframe class='showcase' title={title} src={content}></iframe>}
68
68
 
69
69
  </div>
70
70
 

1

コメントの編集

2020/02/16 07:58

投稿

lisateratail
lisateratail

スコア7

test CHANGED
File without changes
test CHANGED
@@ -82,7 +82,7 @@
82
82
 
83
83
  this.contents = JSON.parse(CONTENTS_JSON);
84
84
 
85
- // 回答が表示されている質問のidを配列で持てるようにする
85
+ // idを配列で持てるようにする
86
86
 
87
87
  this.state = {
88
88