質問編集履歴

1

コード追加

2020/07/09 14:13

投稿

07290729
07290729

スコア15

test CHANGED
File without changes
test CHANGED
@@ -17,3 +17,343 @@
17
17
 
18
18
 
19
19
  お分かりになる方がいらっしゃいましたら、ご教授お願いしますm
20
+
21
+
22
+
23
+ - Sample1
24
+
25
+ ```
26
+
27
+ import React, {useState} from 'react';
28
+
29
+ import { useForm } from "react-hook-form";
30
+
31
+ import { Grid } from '@material-ui/core';
32
+
33
+ import './address.css';
34
+
35
+ import Phone from './Phone';
36
+
37
+
38
+
39
+ function Address() {
40
+
41
+ const {register, handleSubmit, getValues} = useForm();
42
+
43
+ const [addresses, setAddresses] = useState(["address0"]);
44
+
45
+ const [isPhone, setIsPhone] = useState([false])
46
+
47
+
48
+
49
+ function addAddress() {
50
+
51
+ const newAddresses = [...addresses];
52
+
53
+ console.log("before", newAddresses, addresses, `address.${addresses.length}`);
54
+
55
+ newAddresses.push(`address.${addresses.length}`);
56
+
57
+ setAddresses(newAddresses);
58
+
59
+ console.log(newAddresses, addresses, `address.${addresses.length}`);
60
+
61
+ };
62
+
63
+
64
+
65
+ function removeAddress(index) {
66
+
67
+ if (addresses.length > 1) {
68
+
69
+ const newAddresses = [...addresses];
70
+
71
+ console.log("target", index);
72
+
73
+ newAddresses.splice(index, 1);
74
+
75
+ for (var i = index; i < newAddresses.length; i++) {
76
+
77
+ newAddresses[i] = `address.${i}`;
78
+
79
+ }
80
+
81
+ setAddresses(newAddresses);
82
+
83
+ console.log(newAddresses, addresses, `address.${addresses.length}`);
84
+
85
+ }
86
+
87
+ }
88
+
89
+
90
+
91
+ function setPhone(index) {
92
+
93
+ const newPhone = [...isPhone];
94
+
95
+ newPhone[index] = true;
96
+
97
+ setIsPhone(newPhone);
98
+
99
+ }
100
+
101
+
102
+
103
+ return (
104
+
105
+ <form onSubmit={handleSubmit()}>
106
+
107
+
108
+
109
+ <h3>Address</h3>
110
+
111
+ <button type="button" onClick={addAddress}>
112
+
113
+ Add Address
114
+
115
+ </button>
116
+
117
+ {addresses.map((address, index) => {
118
+
119
+ return (
120
+
121
+ <div key={address}>
122
+
123
+ <fieldset className="fieldset" name={address}>
124
+
125
+ <Grid container>
126
+
127
+ <Grid item xs={4}>
128
+
129
+ Address
130
+
131
+ </Grid>
132
+
133
+ <Grid item>
134
+
135
+ <input
136
+
137
+ type="text"
138
+
139
+ name={address}
140
+
141
+ size="40"
142
+
143
+ ref={register}
144
+
145
+ />
146
+
147
+ </Grid>
148
+
149
+ </Grid>
150
+
151
+
152
+
153
+ <Grid container>
154
+
155
+ <Grid item xs={4}>
156
+
157
+ Phone1 (Home)
158
+
159
+ </Grid>
160
+
161
+ <Grid item xs={4}>
162
+
163
+ <input
164
+
165
+ type="checkbox"
166
+
167
+ name={`${address}_phone1`}
168
+
169
+ ref={register}
170
+
171
+ />
172
+
173
+ </Grid>
174
+
175
+ </Grid>
176
+
177
+
178
+
179
+ <Grid container>
180
+
181
+ <Grid item xs={4}>
182
+
183
+ Phone2 (Mobile)
184
+
185
+ </Grid>
186
+
187
+ <Grid item xs={4}>
188
+
189
+ <input
190
+
191
+ type="checkbox"
192
+
193
+ name={`${address}_phone2`}
194
+
195
+ ref={register}
196
+
197
+ />
198
+
199
+ </Grid>
200
+
201
+ </Grid>
202
+
203
+
204
+
205
+ <button onClick={() => setPhone(index)}>add Phone Info</button>
206
+
207
+ {isPhone[index] &&
208
+
209
+ <Phone register={register} values={getValues} address={`address${index}`} />
210
+
211
+ }
212
+
213
+
214
+
215
+ </fieldset>
216
+
217
+ <button type="button" onClick={() => removeAddress(index)}>
218
+
219
+ -
220
+
221
+ </button>
222
+
223
+ </div>
224
+
225
+ )
226
+
227
+ })}
228
+
229
+ </form>
230
+
231
+ )
232
+
233
+ }
234
+
235
+
236
+
237
+ export default Address;
238
+
239
+ ```
240
+
241
+
242
+
243
+
244
+
245
+ - Sample2
246
+
247
+ ```
248
+
249
+ import React from 'react';
250
+
251
+ import "./input.css";
252
+
253
+ import { Grid } from '@material-ui/core';
254
+
255
+
256
+
257
+ const Phone = ({ register, watch, values, address }) => {
258
+
259
+ const address_phone1 = `values.${address}_phone1`;
260
+
261
+ const address_phone2 = `values.${address}_phone2`;
262
+
263
+ console.log("phone1:", address, "value1: ", address_phone1, "value2: ", address_phone2);
264
+
265
+
266
+
267
+ return (
268
+
269
+ <div>
270
+
271
+ <fieldset>
272
+
273
+ <h3>Phone Info {address}</h3>
274
+
275
+
276
+
277
+ {address_phone1 &&
278
+
279
+ <Grid container>
280
+
281
+ <Grid item xs={4}>
282
+
283
+ Phone1
284
+
285
+ </Grid>
286
+
287
+ <Grid item>
288
+
289
+ <input
290
+
291
+ type="text"
292
+
293
+ name={`${address}_phone1_number`}
294
+
295
+ size="15"
296
+
297
+ defaultValue="03-XXXX-XXXX"
298
+
299
+ ref={register}
300
+
301
+ />
302
+
303
+ </Grid>
304
+
305
+ </Grid>
306
+
307
+ }
308
+
309
+
310
+
311
+ {address_phone2 &&
312
+
313
+ <Grid container>
314
+
315
+ <Grid item xs={4}>
316
+
317
+ Phone2
318
+
319
+ </Grid>
320
+
321
+ <Grid item>
322
+
323
+ <input
324
+
325
+ type="text"
326
+
327
+ name={`${address}_phone2_number`}
328
+
329
+ size="15"
330
+
331
+ defaultValue="090-XXXX-XXXX"
332
+
333
+ ref={register}
334
+
335
+ />
336
+
337
+ </Grid>
338
+
339
+ </Grid>
340
+
341
+ }
342
+
343
+
344
+
345
+
346
+
347
+ </fieldset>
348
+
349
+ </div>
350
+
351
+ )
352
+
353
+ }
354
+
355
+
356
+
357
+ export default Phone;
358
+
359
+ ```