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

質問編集履歴

1

コード追加

2020/07/09 14:13

投稿

07290729
07290729

スコア15

title CHANGED
File without changes
body CHANGED
@@ -7,4 +7,174 @@
7
7
  `values.hensu` などとしても、ただの文字列になってしまいます・・・。
8
8
  (hensu にセットされる文字列を直接記載して values.XXX とすると、値は正確に取れている状態です)
9
9
 
10
- お分かりになる方がいらっしゃいましたら、ご教授お願いしますm
10
+ お分かりになる方がいらっしゃいましたら、ご教授お願いしますm
11
+
12
+ - Sample1
13
+ ```
14
+ import React, {useState} from 'react';
15
+ import { useForm } from "react-hook-form";
16
+ import { Grid } from '@material-ui/core';
17
+ import './address.css';
18
+ import Phone from './Phone';
19
+
20
+ function Address() {
21
+ const {register, handleSubmit, getValues} = useForm();
22
+ const [addresses, setAddresses] = useState(["address0"]);
23
+ const [isPhone, setIsPhone] = useState([false])
24
+
25
+ function addAddress() {
26
+ const newAddresses = [...addresses];
27
+ console.log("before", newAddresses, addresses, `address.${addresses.length}`);
28
+ newAddresses.push(`address.${addresses.length}`);
29
+ setAddresses(newAddresses);
30
+ console.log(newAddresses, addresses, `address.${addresses.length}`);
31
+ };
32
+
33
+ function removeAddress(index) {
34
+ if (addresses.length > 1) {
35
+ const newAddresses = [...addresses];
36
+ console.log("target", index);
37
+ newAddresses.splice(index, 1);
38
+ for (var i = index; i < newAddresses.length; i++) {
39
+ newAddresses[i] = `address.${i}`;
40
+ }
41
+ setAddresses(newAddresses);
42
+ console.log(newAddresses, addresses, `address.${addresses.length}`);
43
+ }
44
+ }
45
+
46
+ function setPhone(index) {
47
+ const newPhone = [...isPhone];
48
+ newPhone[index] = true;
49
+ setIsPhone(newPhone);
50
+ }
51
+
52
+ return (
53
+ <form onSubmit={handleSubmit()}>
54
+
55
+ <h3>Address</h3>
56
+ <button type="button" onClick={addAddress}>
57
+ Add Address
58
+ </button>
59
+ {addresses.map((address, index) => {
60
+ return (
61
+ <div key={address}>
62
+ <fieldset className="fieldset" name={address}>
63
+ <Grid container>
64
+ <Grid item xs={4}>
65
+ Address
66
+ </Grid>
67
+ <Grid item>
68
+ <input
69
+ type="text"
70
+ name={address}
71
+ size="40"
72
+ ref={register}
73
+ />
74
+ </Grid>
75
+ </Grid>
76
+
77
+ <Grid container>
78
+ <Grid item xs={4}>
79
+ Phone1 (Home)
80
+ </Grid>
81
+ <Grid item xs={4}>
82
+ <input
83
+ type="checkbox"
84
+ name={`${address}_phone1`}
85
+ ref={register}
86
+ />
87
+ </Grid>
88
+ </Grid>
89
+
90
+ <Grid container>
91
+ <Grid item xs={4}>
92
+ Phone2 (Mobile)
93
+ </Grid>
94
+ <Grid item xs={4}>
95
+ <input
96
+ type="checkbox"
97
+ name={`${address}_phone2`}
98
+ ref={register}
99
+ />
100
+ </Grid>
101
+ </Grid>
102
+
103
+ <button onClick={() => setPhone(index)}>add Phone Info</button>
104
+ {isPhone[index] &&
105
+ <Phone register={register} values={getValues} address={`address${index}`} />
106
+ }
107
+
108
+ </fieldset>
109
+ <button type="button" onClick={() => removeAddress(index)}>
110
+ -
111
+ </button>
112
+ </div>
113
+ )
114
+ })}
115
+ </form>
116
+ )
117
+ }
118
+
119
+ export default Address;
120
+ ```
121
+
122
+
123
+ - Sample2
124
+ ```
125
+ import React from 'react';
126
+ import "./input.css";
127
+ import { Grid } from '@material-ui/core';
128
+
129
+ const Phone = ({ register, watch, values, address }) => {
130
+ const address_phone1 = `values.${address}_phone1`;
131
+ const address_phone2 = `values.${address}_phone2`;
132
+ console.log("phone1:", address, "value1: ", address_phone1, "value2: ", address_phone2);
133
+
134
+ return (
135
+ <div>
136
+ <fieldset>
137
+ <h3>Phone Info {address}</h3>
138
+
139
+ {address_phone1 &&
140
+ <Grid container>
141
+ <Grid item xs={4}>
142
+ Phone1
143
+ </Grid>
144
+ <Grid item>
145
+ <input
146
+ type="text"
147
+ name={`${address}_phone1_number`}
148
+ size="15"
149
+ defaultValue="03-XXXX-XXXX"
150
+ ref={register}
151
+ />
152
+ </Grid>
153
+ </Grid>
154
+ }
155
+
156
+ {address_phone2 &&
157
+ <Grid container>
158
+ <Grid item xs={4}>
159
+ Phone2
160
+ </Grid>
161
+ <Grid item>
162
+ <input
163
+ type="text"
164
+ name={`${address}_phone2_number`}
165
+ size="15"
166
+ defaultValue="090-XXXX-XXXX"
167
+ ref={register}
168
+ />
169
+ </Grid>
170
+ </Grid>
171
+ }
172
+
173
+
174
+ </fieldset>
175
+ </div>
176
+ )
177
+ }
178
+
179
+ export default Phone;
180
+ ```