質問編集履歴

6

文法の修正をいたしました

2020/08/08 01:07

投稿

obaq_4309
obaq_4309

スコア10

test CHANGED
@@ -1 +1 @@
1
- React.jsにて未定義のプロパティ 'replace' を読みれませんというエラーで困って
1
+ React.jsにてWarning: Each child in a list should have a unique "key" prop.というエラーが発生しした。
test CHANGED
@@ -1,22 +1,14 @@
1
- ### 前提・実現したいこと
2
-
3
- コロナ感染のトラッカーを作っているのですが、感染者数推移のグラフを作るあたりから画面にグラフが表示されなくなり、ほぼリアルタイムでコロナ感染数がわかるAPIとマップを作る頃には今まで作っていたものが画面に表示されなくなりました。
4
-
5
-
6
-
7
- 実現したいことはエラーを解決して推移グラフと感染マップが表示されるようしたいです
1
+ コロナ感染のトッカーを過程でタイトルのようなエラーが発生ました。
2
+
8
-
3
+ DeepLにて翻訳をかけてみたら「警告。リスト内の各子は一意の "キー" プロップを持つ必要があります。」
4
+
9
-
5
+ と出てきたので、Reaactの公式リファレンスの方で「リストとkey」、「レンダープロップ」について確認してみましたが、自分のエラーに対してどういった風にその知識を転換させ、エラー解決に持ち込めるのか分からなくなってしまったので質問させていただきました。
10
6
 
11
7
  ### エラー(画像)
12
8
 
13
- ![イメージ説明](dabd7193c108e3deccdff97b0ff7be32.png)
9
+ ![イメージ説明](9b159c0efe352c3d440321bcd7b780e2.png)
14
-
15
- ![イメージ説明](65639208c3ad37f63b530c6ee24a414f.png)
10
+
16
-
17
- ![イメージ説明](e2d97b75c44ed7c97a24ae073836e0c1.png)
11
+ ![イメージ説明](31733ec13db3924e3f7c65995e53899c.png)
18
-
19
-
20
12
 
21
13
  ### 該当のソースコード(App.js)
22
14
 
@@ -130,7 +122,7 @@
130
122
 
131
123
 
132
124
 
133
- console.log((casesType));
125
+ console.log(casesType);
134
126
 
135
127
 
136
128
 
@@ -204,8 +196,6 @@
204
196
 
205
197
  </div>
206
198
 
207
-
208
-
209
199
  <div className="app__stats">
210
200
 
211
201
  <InfoBox
@@ -280,9 +270,9 @@
280
270
 
281
271
  <Table countries={tableData} />
282
272
 
283
- <h3 className="app__graphTitle">Worldwide new {casesType}</h3>
273
+ <h3>Worldwide new {casesType}</h3>
284
-
274
+
285
- <LineGraph className="app__graph" casesType={casesType} />
275
+ <LineGraph casesType={casesType} />
286
276
 
287
277
  </div>
288
278
 
@@ -304,128 +294,252 @@
304
294
 
305
295
 
306
296
 
307
- ### 該当のソースコード(InfoBox.js)
297
+ ### 該当のソースコード(Table.js)
308
-
298
+
309
- ```
299
+ ```
310
-
300
+
311
- import React from 'react';
301
+ import React from "react";
312
-
302
+
313
- import "./InfoBox.css";
303
+ import "./Table.css";
314
-
304
+
315
- import { Card, CardContent, Typography } from "@material-ui/core";
305
+ import numeral from "numeral";
316
-
317
-
318
-
319
- function InfoBox({ title, cases, total, active, isRed, ...props }) {
306
+
320
-
307
+
308
+
321
- console.log(title, active);
309
+ function Table({ countries }) {
322
310
 
323
311
  return (
324
312
 
313
+ <div className="table">
314
+
315
+ {countries.map((country) => (
316
+
317
+ <tr>
318
+
319
+ <td>{country.country}</td>
320
+
321
+ <td>
322
+
323
+ <strong>{numeral(country.cases).format("0,0")}</strong>
324
+
325
+ </td>
326
+
327
+ </tr>
328
+
329
+ ))}
330
+
331
+ </div>
332
+
333
+ );
334
+
335
+ }
336
+
337
+
338
+
339
+ export default Table;
340
+
341
+ ```
342
+
343
+ ###該当のソースコード(Map.js)
344
+
345
+ ```
346
+
347
+ import React from "react";
348
+
349
+ import { Map as LeafletMap, TileLayer } from "react-leaflet";
350
+
351
+ import "./Map.css";
352
+
353
+ import { showDataOnMap } from "./util";
354
+
355
+
356
+
357
+ function Map({ countries, casesType, center, zoom }) {
358
+
359
+ return (
360
+
361
+ <div className="map">
362
+
363
+ <LeafletMap center={center} zoom={zoom}>
364
+
365
+ <TileLayer
366
+
367
+ url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
368
+
369
+ attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
370
+
371
+ />
372
+
373
+ {showDataOnMap(countries, casesType)}
374
+
375
+ </LeafletMap>
376
+
377
+ </div>
378
+
379
+ );
380
+
381
+ }
382
+
383
+
384
+
385
+ export default Map;
386
+
387
+ ```
388
+
389
+ ###該当のソースコード(util.js)
390
+
391
+ ```
392
+
393
+ import React from "react";
394
+
395
+ import numeral from "numeral";
396
+
397
+ import { Circle, Popup } from "react-leaflet";
398
+
399
+
400
+
401
+ const casesTypeColors = {
402
+
403
+ cases: {
404
+
405
+ hex: "#CC1034",
406
+
407
+ rgb: "rgb(204, 16, 52)",
408
+
409
+ half_op: "rgba(204, 16, 52, 0.5)",
410
+
411
+ multiplier: 800,
412
+
413
+ },
414
+
415
+ recovered: {
416
+
417
+ hex: "#7dd71d",
418
+
419
+ rgb: "rgb(125, 215, 29)",
420
+
421
+ half_op: "rgba(125, 215, 29, 0.5)",
422
+
423
+ multiplier: 1200,
424
+
425
+ },
426
+
427
+ deaths: {
428
+
429
+ hex: "#fb4443",
430
+
431
+ rgb: "rgb(251, 68, 67)",
432
+
433
+ half_op: "rgba(251, 68, 67, 0.5)",
434
+
435
+ multiplier: 2000,
436
+
437
+ },
438
+
439
+ };
440
+
441
+
442
+
443
+ export const sortData = (data) => {
444
+
445
+ let sortedData = [...data];
446
+
447
+ sortedData.sort((a, b) => {
448
+
449
+ if (a.cases > b.cases) {
450
+
451
+ return -1;
452
+
453
+ } else {
454
+
455
+ return 1;
456
+
457
+ }
458
+
459
+ });
460
+
461
+ return sortedData;
462
+
463
+ };
464
+
465
+
466
+
467
+ export const prettyPrintStat = (stat) =>
468
+
469
+ stat ? `+${numeral(stat).format("0.0a")}` : "+0";
470
+
471
+
472
+
473
+ export const showDataOnMap = (data, casesType = "cases") =>
474
+
475
+ data.map((country) => (
476
+
325
- <Card
477
+ <Circle
478
+
326
-
479
+ center={[country.countryInfo.lat, country.countryInfo.long]}
480
+
481
+ color={casesTypeColors[casesType].hex}
482
+
483
+ fillColor={casesTypeColors[casesType].hex}
484
+
327
- onClick={props.onClick}
485
+ fillOpacity={0.4}
486
+
328
-
487
+ radius={
488
+
329
- className={`infoBox ${active && "infoBox--selected"} ${
489
+ Math.sqrt(country[casesType]) * casesTypeColors[casesType].multiplier
330
-
331
- isRed && "infoBox--red"
490
+
332
-
333
- }`}
491
+ }
334
492
 
335
493
  >
336
494
 
337
- <CardContent>
338
-
339
- <Typography color="textSecondary" gutterBottom>
340
-
341
- {title}
342
-
343
- </Typography>
344
-
345
- <h2 className={`infoBox__cases ${!isRed && "infoBox__cases--green"}`}>
346
-
347
- {cases}
348
-
349
- </h2>
350
-
351
-
352
-
353
- <Typography className="infoBox__total" color="textSecondary">
354
-
355
- {total} Total
356
-
357
- </Typography>
358
-
359
- </CardContent>
360
-
361
- </Card>
362
-
363
- );
364
-
365
- }
366
-
367
-
368
-
369
- export default InfoBox;
370
-
371
-
372
-
373
- ```
374
-
375
-
376
-
377
- ### 該当のソースコード(Map.js)
378
-
379
- ```
380
-
381
- import React from "react";
382
-
383
- import "./Map.css";
384
-
385
- import { Map as LeafleMap, TileLayer } from "react-leaflet";
386
-
387
- import { showDataOnmap } from "./util";
388
-
389
-
390
-
391
- function Map({ countries, casesType, center, zoom }) {
392
-
393
- return (
394
-
395
- <div className="map">
396
-
397
- <LeafleMap center={center} zoom={zoom}>
398
-
399
- <TileLayer
400
-
401
- uurl="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
402
-
403
- attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
404
-
405
- />
406
-
407
- {showDataOnmap(countries, casesType)}
408
-
409
- </LeafleMap>
410
-
411
- </div>
412
-
413
- );
414
-
415
- }
416
-
417
-
418
-
419
- export default Map;
420
-
421
-
422
-
423
- ```
424
-
425
- ### 補足情報(OS/参考動画/GitHubのソースコード)
495
+ <Popup>
496
+
497
+ <div className="info-container">
498
+
499
+ <div
500
+
501
+ className="info-flag"
502
+
503
+ style={{ backgroundImage: `url(${country.countryInfo.flag})` }}
504
+
505
+ ></div>
506
+
507
+ <div className="info-name">{country.country}</div>
508
+
509
+ <div className="info-confirmed">
510
+
511
+ Cases: {numeral(country.cases).format("0,0")}
512
+
513
+ </div>
514
+
515
+ <div className="info-recovered">
516
+
517
+ Recovered: {numeral(country.recovered).format("0,0")}
518
+
519
+ </div>
520
+
521
+ <div className="info-deaths">
522
+
523
+ Deaths: {numeral(country.deaths).format("0,0")}
524
+
525
+ </div>
526
+
527
+ </div>
528
+
529
+ </Popup>
530
+
531
+ </Circle>
532
+
533
+ ));
534
+
535
+ ```
536
+
537
+ ### 補足情報(OS/参考動画/GitHub/react公式)
426
538
 
427
539
  OS Windows10
428
540
 
429
541
  [学習元動画](https://www.youtube.com/watch?v=cF3pIMJUZxM&feature=youtu.be&t=12317)
430
542
 
431
543
  [GitHub](https://github.com/CleverProgrammers/react-covid-tracker)
544
+
545
+ [React公式](https://ja.reactjs.org/)

5

エラー文を追加しました

2020/08/08 01:07

投稿

obaq_4309
obaq_4309

スコア10

test CHANGED
File without changes
test CHANGED
@@ -14,6 +14,10 @@
14
14
 
15
15
  ![イメージ説明](65639208c3ad37f63b530c6ee24a414f.png)
16
16
 
17
+ ![イメージ説明](e2d97b75c44ed7c97a24ae073836e0c1.png)
18
+
19
+
20
+
17
21
  ### 該当のソースコード(App.js)
18
22
 
19
23
  ```
@@ -298,6 +302,8 @@
298
302
 
299
303
  ```
300
304
 
305
+
306
+
301
307
  ### 該当のソースコード(InfoBox.js)
302
308
 
303
309
  ```
@@ -366,6 +372,8 @@
366
372
 
367
373
  ```
368
374
 
375
+
376
+
369
377
  ### 該当のソースコード(Map.js)
370
378
 
371
379
  ```

4

Map.jsのコードを追加しました

2020/08/07 16:19

投稿

obaq_4309
obaq_4309

スコア10

test CHANGED
File without changes
test CHANGED
@@ -366,6 +366,54 @@
366
366
 
367
367
  ```
368
368
 
369
+ ### 該当のソースコード(Map.js)
370
+
371
+ ```
372
+
373
+ import React from "react";
374
+
375
+ import "./Map.css";
376
+
377
+ import { Map as LeafleMap, TileLayer } from "react-leaflet";
378
+
379
+ import { showDataOnmap } from "./util";
380
+
381
+
382
+
383
+ function Map({ countries, casesType, center, zoom }) {
384
+
385
+ return (
386
+
387
+ <div className="map">
388
+
389
+ <LeafleMap center={center} zoom={zoom}>
390
+
391
+ <TileLayer
392
+
393
+ uurl="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
394
+
395
+ attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
396
+
397
+ />
398
+
399
+ {showDataOnmap(countries, casesType)}
400
+
401
+ </LeafleMap>
402
+
403
+ </div>
404
+
405
+ );
406
+
407
+ }
408
+
409
+
410
+
411
+ export default Map;
412
+
413
+
414
+
415
+ ```
416
+
369
417
  ### 補足情報(OS/参考動画/GitHubのソースコード)
370
418
 
371
419
  OS Windows10

3

文法の修正をいたしました

2020/08/07 09:13

投稿

obaq_4309
obaq_4309

スコア10

test CHANGED
File without changes
test CHANGED
@@ -6,6 +6,14 @@
6
6
 
7
7
  実現したいことはエラーを解決して推移グラフと感染マップが表示されるようにしたいです。
8
8
 
9
+
10
+
11
+ ### エラー(画像)
12
+
13
+ ![イメージ説明](dabd7193c108e3deccdff97b0ff7be32.png)
14
+
15
+ ![イメージ説明](65639208c3ad37f63b530c6ee24a414f.png)
16
+
9
17
  ### 該当のソースコード(App.js)
10
18
 
11
19
  ```

2

タイトルに誤字があったので訂正いたしました

2020/08/07 09:01

投稿

obaq_4309
obaq_4309

スコア10

test CHANGED
@@ -1 +1 @@
1
- Reactjsにて未定義のプロパティ 'replace' を読みとれませんというエラーで困ってます
1
+ React.jsにて未定義のプロパティ 'replace' を読みとれませんというエラーで困ってます
test CHANGED
File without changes

1

文法の修正をいたしました

2020/08/07 08:59

投稿

obaq_4309
obaq_4309

スコア10

test CHANGED
@@ -1 +1 @@
1
- Reactjsにて未定義のプロパティ 'replace' を読みとれませんと表示されます
1
+ Reactjsにて未定義のプロパティ 'replace' を読みとれませんというエラーで困ってます
test CHANGED
@@ -1,8 +1,10 @@
1
- ### 発生る問題・エラーメッセージ
1
+ ### 前提・実現こと
2
+
2
-
3
+ コロナ感染のトラッカーを作っているのですが、感染者数推移のグラフを作るあたりから画面にグラフが表示されなくなり、ほぼリアルタイムでコロナ感染数がわかるAPIとマップを作る頃には今まで作っていたものが画面に表示されなくなりました。
4
+
5
+
6
+
3
- ![イメジ説明](f6e846659cb9db763ac61d588f3f21a7.png)
7
+ 実現したいことはエラを解決して推移グラフと感染マップが表示されるようにしたいです。
4
-
5
- ![イメージ説明](4dcafb808446e92580c18d4199ce7828.png)
6
8
 
7
9
  ### 該当のソースコード(App.js)
8
10
 
@@ -360,6 +362,6 @@
360
362
 
361
363
  OS Windows10
362
364
 
363
- [参考動画](https://www.youtube.com/watch?v=cF3pIMJUZxM&feature=youtu.be&t=12317)
365
+ [学習元動画](https://www.youtube.com/watch?v=cF3pIMJUZxM&feature=youtu.be&t=12317)
364
366
 
365
367
  [GitHub](https://github.com/CleverProgrammers/react-covid-tracker)