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

回答編集履歴

3

テキスト修正

2018/09/24 14:15

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -65,10 +65,22 @@
65
65
  上記の `onDialogClosed()` の中では、以下のように `this.state.DialogIsOpen` を false にするように、 setState します。
66
66
 
67
67
  **親コンポーネント:**
68
+
68
69
  ```javascript
69
70
  onDialogClosed() {
70
71
  this.setState({DialogIsOpen: false});
71
72
  }
72
73
  ```
74
+ ```javascript
75
+ this.onDialogClosed = this.onDialogClosed.bind(this);
76
+ ```
73
77
 
78
+ または、 [class-properties](https://babeljs.io/docs/en/babel-plugin-transform-class-properties) の書き方が出来るbabel設定のようですので、以下です。
79
+
80
+ ```javascript
81
+ onDialogClosed = () => {
82
+ this.setState({DialogIsOpen: false});
83
+ }
84
+ ```
85
+
74
86
  以上です。

2

テキスト修正

2018/09/24 14:15

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -23,4 +23,52 @@
23
23
 
24
24
  seiyan0426さんへ
25
25
 
26
- 上記の回答は勘違いによる誤った回答でしたので、すみませんが、無視してください。
26
+ 上記の回答は勘違いによる誤った回答でしたので、すみませんが、無視してください。
27
+
28
+ ---
29
+ **追記2**
30
+
31
+ 以下でうまくいくのではないか? と思ってます。
32
+
33
+ `<Dialog />` のほうでは、`this.state` を持たないようにします。(したがって、 Functional Componentにしてもよいと思います。) さらに、 `<StyledCloseImg />` の `onClick`ハンドラも propsから渡します。仮に`onClosed`という名前のpropsで渡すとすると以下のようになるでしょう。
34
+
35
+
36
+ ```JSX
37
+
38
+ class Dialog extends Component {
39
+ render() {
40
+ return (
41
+ <StyledDialog open={this.props.isOpen}>
42
+ <StyledDialogTitle>
43
+ <StyledCloseImg
44
+ src={Icons.CloseIcon()}
45
+ onClick={this.props.onClosed} />
46
+ </StyledDialogTitle>
47
+ </StyledDialog>
48
+ );
49
+ }
50
+ }
51
+
52
+ ```
53
+
54
+ 次に、親コンポーネントのほうで、 (この名前がいいかはさておき、) `onDialogClosed()` というメソッドを用意しておき、これを、 `<Dialog />` のprops `onClosed` に渡します。
55
+
56
+ ```JSX
57
+
58
+ <Dialog
59
+ isOpen={this.state.DialogIsOpen}
60
+ onClosed={this.onDialogClosed}
61
+ />
62
+
63
+ ```
64
+
65
+ 上記の `onDialogClosed()` の中では、以下のように `this.state.DialogIsOpen` を false にするように、 setState します。
66
+
67
+ **親コンポーネント:**
68
+ ```javascript
69
+ onDialogClosed() {
70
+ this.setState({DialogIsOpen: false});
71
+ }
72
+ ```
73
+
74
+ 以上です。

1

テキスト修正

2018/09/24 14:01

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,19 +1,26 @@
1
- こんにちは。
1
+ ~~こんにちは。~~
2
2
 
3
- `constructor()` で、 `this.state` を設定するところを以下のように修正することで、うまくいきませんか?
3
+ ~~ `constructor()` で、 `this.state` を設定するところを以下のように修正することで、うまくいきませんか? ~~
4
4
 
5
- 修正前:
5
+ ~~修正前:~~
6
6
  ```javascript
7
7
  this.state = {
8
8
  isDialogOpen: this.props.isOpen,
9
9
  };
10
10
  ```
11
11
 
12
- 修正後:
12
+ ~~修正後:~~
13
13
  ```javascript
14
14
  this.state = {
15
15
  isDialogOpen: props.isOpen,
16
16
  };
17
17
  ```
18
18
 
19
- 参考になれば幸いです。
19
+ ~~参考になれば幸いです。~~
20
+
21
+ ---
22
+ **追記**
23
+
24
+ seiyan0426さんへ
25
+
26
+ 上記の回答は勘違いによる誤った回答でしたので、すみませんが、無視してください。