回答編集履歴

1

サンプルコードの追加

2018/07/10 17:00

投稿

og24715
og24715

スコア832

test CHANGED
@@ -51,3 +51,117 @@
51
51
 
52
52
 
53
53
  無駄に複雑にしている気がするので上の問題をまずクリアしてみてください。
54
+
55
+
56
+
57
+ ---
58
+
59
+
60
+
61
+ 自分なら以下のようにします。解説が必要でしたらそのように言ってください。
62
+
63
+ [https://codepen.io/og24715/pen/VBwdEx?editors=0010](https://codepen.io/og24715/pen/VBwdEx?editors=0010)
64
+
65
+
66
+
67
+ ```js
68
+
69
+ class Select extends React.Component {
70
+
71
+ state = {
72
+
73
+ items: [{
74
+
75
+ id: 1,
76
+
77
+ name: 'React',
78
+
79
+ chosen: false,
80
+
81
+ }, {
82
+
83
+ id: 2,
84
+
85
+ name: 'Redux',
86
+
87
+ chosen: false,
88
+
89
+ }]
90
+
91
+ }
92
+
93
+
94
+
95
+ _handleClick = id => event => {
96
+
97
+ const items = [...this.state.items];
98
+
99
+ const item = this.state.items.find(item => item.id === id);
100
+
101
+ item.chosen = !item.chosen;
102
+
103
+
104
+
105
+ this.setState({ items });
106
+
107
+ };
108
+
109
+
110
+
111
+ render() {
112
+
113
+ return (
114
+
115
+ <ItemList
116
+
117
+ items={this.state.items}
118
+
119
+ handleClick={this._handleClick}
120
+
121
+ />
122
+
123
+ )
124
+
125
+ }
126
+
127
+ }
128
+
129
+
130
+
131
+ const ItemList = ({ items, handleClick }) => (
132
+
133
+ items.map(item => (
134
+
135
+ <Item
136
+
137
+ key={item.id}
138
+
139
+ item={item}
140
+
141
+ handleClick={handleClick}
142
+
143
+ />
144
+
145
+ ))
146
+
147
+ );
148
+
149
+
150
+
151
+ const Item = ({ item, handleClick }) => (
152
+
153
+ <button
154
+
155
+ onClick={handleClick(item.id)}
156
+
157
+ >
158
+
159
+ {item.chosen && '✔ '}
160
+
161
+ {item.name}
162
+
163
+ </button>
164
+
165
+ );
166
+
167
+ ```