回答編集履歴

4

テキスト修正

2020/01/08 07:13

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -168,7 +168,7 @@
168
168
 
169
169
  ```
170
170
 
171
- というものになります、これだと、 `isOpen`がfalseのときにも、内容が空の `<p></p>`ができてしまいますこれを避けるために
171
+ というものになります。ただし、これだと、 `isOpen`がfalseのときにも、内容が空の `<p></p>`ができてしまいますので、これを避けるために
172
172
 
173
173
  ```jsx
174
174
 

3

テキスト修正

2020/01/08 07:13

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
 
36
36
 
37
- ご質問にある現状のコードでは、質問と回答のテキストが、 Bodyコンポーネントのrenderで返すJSXの中に書かれていますが、今後、質問の追加、削除、修正があったときに、修正を分かりやすくするために、質問と回答の組を、コンポーネントの外で作ります。その一例として、以下のようなJSONテキストで持つようにします。
37
+ ご質問にある現状のコードでは、質問と回答のテキストが、 Bodyコンポーネントのrenderで返すJSXの中に書かれていますが、今後、質問の追加、削除、修正があったときに、加える箇所を分かりやすくするために、質問と回答の組を、コンポーネントの外で作ります。その一例として、以下のようなJSONテキストで持つようにします。
38
38
 
39
39
 
40
40
 

2

テキスト修正

2020/01/08 07:10

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -402,6 +402,64 @@
402
402
 
403
403
 
404
404
 
405
+ ### 補足2
406
+
407
+
408
+
409
+ Body の `this.state.openIds` を配列ではなく、オブジェクトで持つことも考えられます。この場合、コンストラクターで以下のように空オブジェクトで初期化します。
410
+
411
+
412
+
413
+ ```javascript
414
+
415
+ this.state = {
416
+
417
+ openIds: {}
418
+
419
+ };
420
+
421
+ ```
422
+
423
+ 上記に合わせると、`handleClick` は以下のようになります。
424
+
425
+ ```javascript
426
+
427
+ handleClick(id) {
428
+
429
+ this.setState({
430
+
431
+ openIds: {
432
+
433
+ ...this.state.openIds,
434
+
435
+ [id]: !this.state.openIds[id]
436
+
437
+ }
438
+
439
+ });
440
+
441
+ }
442
+
443
+ ```
444
+
445
+
446
+
447
+ さらに、render の中で `Question` に渡す `isOpen` を以下のように修正します。
448
+
449
+
450
+
451
+ ```jsx
452
+
453
+ isOpen={!!this.state.openIds[q.id]}
454
+
455
+ ```
456
+
457
+ 上記で`!!`は無くても動きますが、 boolean を渡すことを明示するために付けています。
458
+
459
+
460
+
461
+ - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/bGNLLgQ](https://codepen.io/jun68ykt/pen/bGNLLgQ)
462
+
405
463
 
406
464
 
407
465
 

1

テキスト修正

2020/01/08 06:15

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -350,6 +350,8 @@
350
350
 
351
351
  <Question
352
352
 
353
+ key={q.id}
354
+
353
355
  text={q.text}
354
356
 
355
357
  answer={q.answer}