回答編集履歴

1

テキスト追加

2021/10/01 04:04

投稿

退会済みユーザー
test CHANGED
@@ -41,3 +41,201 @@
41
41
  ```
42
42
 
43
43
  に、一行でも書けるよってに。
44
+
45
+
46
+
47
+
48
+
49
+ ### 補足
50
+
51
+
52
+
53
+ 以下は本題とは無関係なお節介なので、時間あるときにでも読んでみてや。
54
+
55
+
56
+
57
+ ここんとこ
58
+
59
+ ```jsx
60
+
61
+ <form>
62
+
63
+ <label>
64
+
65
+ <input type="radio" value="all" onChange={(e) => setRadio(e.target.value)} checked={radio === "all"} />
66
+
67
+ 全て
68
+
69
+ </label>
70
+
71
+ <label>
72
+
73
+ <input
74
+
75
+ type="radio"
76
+
77
+ value="incomplete"
78
+
79
+ onChange={(e) => setRadio(e.target.value)}
80
+
81
+ checked={radio === "incomplete"}
82
+
83
+ />
84
+
85
+ 作業中
86
+
87
+ </label>
88
+
89
+ <label>
90
+
91
+ <input
92
+
93
+ type="radio"
94
+
95
+ value="completed"
96
+
97
+ onChange={(e) => setRadio(e.target.value)}
98
+
99
+ checked={radio === "completed"}
100
+
101
+ />
102
+
103
+ 完了
104
+
105
+ </label>
106
+
107
+ </form>
108
+
109
+ ```
110
+
111
+
112
+
113
+ <form>の中に、ラジオボタン3つ並べてるんやけど、似たようなコードのかたまりが3回連続するやん。そやから <label>から </label> までんとこ、別のコンポーネントに切り出すとええで。やり方の一例としては、こんなん
114
+
115
+
116
+
117
+ ```diff
118
+
119
+ import React, { useState } from "react";
120
+
121
+
122
+
123
+ +const FILTER_VALUES = [
124
+
125
+ + { value: "all", text: "全て" },
126
+
127
+ + { value: "incomplete", text: "作業中" },
128
+
129
+ + { value: "completed", text: "完了" }
130
+
131
+ +];
132
+
133
+ +
134
+
135
+ +const FilterButton = ({ value, text, checked, onChange }) => (
136
+
137
+ + <label>
138
+
139
+ + <input
140
+
141
+ + type="radio"
142
+
143
+ + value={value}
144
+
145
+ + onChange={(e) => onChange(e.target.value)}
146
+
147
+ + checked={checked}
148
+
149
+ + />
150
+
151
+ + {text}
152
+
153
+ + </label>
154
+
155
+ +);
156
+
157
+
158
+
159
+ //入力用 todos
160
+
161
+ //未完了のTodo用 comment
162
+
163
+
164
+
165
+ function App() {
166
+
167
+ const [todos, setTodos] = useState([]);
168
+
169
+ ```
170
+
171
+ を追加しといて、こうや。
172
+
173
+
174
+
175
+ ```diff
176
+
177
+ <form>
178
+
179
+ - <label>
180
+
181
+ - <input type="radio" value="all" onChange={(e) => setRadio(e.target.value)} checked={radio === "all"} />
182
+
183
+ - 全て
184
+
185
+ - </label>
186
+
187
+ - <label>
188
+
189
+ - <input
190
+
191
+ - type="radio"
192
+
193
+ - value="incomplete"
194
+
195
+ - onChange={(e) => setRadio(e.target.value)}
196
+
197
+ - checked={radio === "incomplete"}
198
+
199
+ - />
200
+
201
+ - 作業中
202
+
203
+ - </label>
204
+
205
+ - <label>
206
+
207
+ - <input
208
+
209
+ - type="radio"
210
+
211
+ - value="completed"
212
+
213
+ - onChange={(e) => setRadio(e.target.value)}
214
+
215
+ - checked={radio === "completed"}
216
+
217
+ + {FILTER_VALUES.map(({ value, text }) => (
218
+
219
+ + <FilterButton
220
+
221
+ + key={value}
222
+
223
+ + value={value}
224
+
225
+ + text={text}
226
+
227
+ + checked={radio === value}
228
+
229
+ + onChange={setRadio}
230
+
231
+ />
232
+
233
+ - 完了
234
+
235
+ - </label>
236
+
237
+ + ))}
238
+
239
+ </form>
240
+
241
+ ```