回答編集履歴
4
テキスト修正
test
CHANGED
@@ -168,7 +168,7 @@
|
|
168
168
|
|
169
169
|
```
|
170
170
|
|
171
|
-
というものになります
|
171
|
+
というものになります。ただし、これだと、 `isOpen`がfalseのときにも、内容が空の `<p></p>`ができてしまいますので、これを避けるために
|
172
172
|
|
173
173
|
```jsx
|
174
174
|
|
3
テキスト修正
test
CHANGED
@@ -34,7 +34,7 @@
|
|
34
34
|
|
35
35
|
|
36
36
|
|
37
|
-
ご質問にある現状のコードでは、質問と回答のテキストが、 Bodyコンポーネントのrenderで返すJSXの中に書かれていますが、今後、質問の追加、削除、修正があったときに、
|
37
|
+
ご質問にある現状のコードでは、質問と回答のテキストが、 Bodyコンポーネントのrenderで返すJSXの中に書かれていますが、今後、質問の追加、削除、修正があったときに、手を加える箇所を分かりやすくするために、質問と回答の組を、コンポーネントの外で作ります。その一例として、以下のようなJSONテキストで持つようにします。
|
38
38
|
|
39
39
|
|
40
40
|
|
2
テキスト修正
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
テキスト修正
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}
|