質問編集履歴

10

文章訂正

2021/11/07 02:27

投稿

edu
edu

スコア35

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,8 @@
1
1
  ReactでMaterial-UIを使用して、Webフォームを作成します。
2
2
 
3
3
  下記のエラーの表示を改善したいです。
4
+
5
+ どうやって実装すればいいのかわからず困っています。どなたかアドバイスをお願いします。
4
6
 
5
7
 
6
8
 
@@ -33,10 +35,6 @@
33
35
  Line 61:51: 'handleBack' is not defined no-undef
34
36
 
35
37
  ```
36
-
37
-
38
-
39
- どうやって実装すればいいのかわからず困っています。どなたかアドバイスをお願いします。
40
38
 
41
39
 
42
40
 

9

文章訂正

2021/11/07 02:27

投稿

edu
edu

スコア35

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,12 @@
1
1
  ReactでMaterial-UIを使用して、Webフォームを作成します。
2
2
 
3
+ 下記のエラーの表示を改善したいです。
4
+
5
+
6
+
7
+ ```
8
+
3
- **『Search for the keywords to learn more about each error. **
9
+ Search for the keywords to learn more about each error. 
4
10
 
5
11
  src/components/Content.js
6
12
 
@@ -24,7 +30,11 @@
24
30
 
25
31
  Line 61:39: 'handleNext' is not defined no-undef
26
32
 
27
- Line 61:51: 'handleBack' is not defined no-undef の表示を改善したいです。**
33
+ Line 61:51: 'handleBack' is not defined no-undef
34
+
35
+ ```
36
+
37
+
28
38
 
29
39
  どうやって実装すればいいのかわからず困っています。どなたかアドバイスをお願いします。
30
40
 
@@ -71,6 +81,8 @@
71
81
  **src/components/Content.js**
72
82
 
73
83
 
84
+
85
+ ```
74
86
 
75
87
  import React from "react";
76
88
 

8

文章訂正

2021/11/06 11:15

投稿

edu
edu

スコア35

test CHANGED
@@ -1 +1 @@
1
- TypeError: Cannot destructure property '性別' of 'values' as it is undefined. 』を改善したい
1
+ Search for the keywords to learn more about each error. 』を改善したい
test CHANGED
@@ -1,20 +1,40 @@
1
1
  ReactでMaterial-UIを使用して、Webフォームを作成します。
2
2
 
3
+ **『Search for the keywords to learn more about each error.』 **
4
+
5
+ src/components/Content.js
6
+
7
+ Line 38:35: 'handleNext' is not defined no-undef
8
+
9
+ Line 40:43: 'handleNext' is not defined no-undef
10
+
11
+ Line 40:67: 'handleBack' is not defined no-undef
12
+
13
+ Line 42:38: 'handleNext' is not defined no-undef
14
+
15
+ Line 42:62: 'handleBack' is not defined no-undef
16
+
17
+ Line 44:37: 'handleBack' is not defined no-undef
18
+
19
+ Line 53:30: 'activeStep' is not defined no-undef
20
+
21
+ Line 54:12: 'steps' is not defined no-undef
22
+
23
+ Line 61:27: 'activeStep' is not defined no-undef
24
+
25
+ Line 61:39: 'handleNext' is not defined no-undef
26
+
3
- **『TypeError: Cannot destructure property '性別' of 'values' as it is undefined.』 src/components/Confirm.js:4の表示を改善したいです。**
27
+ Line 61:51: 'handleBack' is not defined no-undef の表示を改善したいです。**
4
28
 
5
29
  どうやって実装すればいいのかわからず困っています。どなたかアドバイスをお願いします。
6
30
 
7
- **期待する動作**
8
31
 
9
- Basics.js、Question.js、Optional.jsでの回答結果をConfirm.jsで表示したい。
10
32
 
11
33
 
12
34
 
13
35
  **App.js**
14
36
 
15
37
  ```
16
-
17
- import "./App.css";
18
38
 
19
39
  import { Grid } from "@mui/material";
20
40
 
@@ -48,185 +68,9 @@
48
68
 
49
69
  ```
50
70
 
51
- **src / components / Basics.js**
71
+ **src/components/Content.js**
52
-
53
- ```
54
-
55
- import React from "react";
56
-
57
- import Radio from "@mui/material/Radio";
58
-
59
- import RadioGroup from "@mui/material/RadioGroup";
60
-
61
- import FormControlLabel from "@mui/material/FormControlLabel";
62
-
63
- import FormControl from "@mui/material/FormControl";
64
-
65
- import FormLabel from "@mui/material/FormLabel";
66
-
67
- import InputLabel from "@mui/material/InputLabel";
68
-
69
- import Select from "@mui/material/Select";
70
72
 
71
73
 
72
-
73
- const Basic = () => {
74
-
75
- return (
76
-
77
- <>
78
-
79
- <div style={{ textAlign: "center" }}>
80
-
81
- <FormControl component="fieldset">
82
-
83
- <FormLabel component="legend">- 性別 -</FormLabel>
84
-
85
- <RadioGroup row aria-label="gender" name="row-radio-buttons-group">
86
-
87
- <FormControlLabel value="male" control={<Radio />} label="男性" />
88
-
89
- <FormControlLabel value="female" control={<Radio />} label="女性" />
90
-
91
- </RadioGroup>
92
-
93
- </FormControl>
94
-
95
- </div>
96
-
97
- <div style={{ textAlign: "center" }}>
98
-
99
- <FormLabel component="legend">- 生年月日 -</FormLabel>
100
-
101
- <FormControl sx={{ m: 1, minWidth: 120 }}>
102
-
103
- <InputLabel htmlFor="grouped-native-select">year</InputLabel>
104
-
105
- <Select native defaultValue="" id="grouped-native-select" label="Grouping">
106
-
107
- <option aria-label="None" value="" />
108
-
109
- <optgroup label="year">
110
-
111
- {Array.from(Array(2020), (_, num) => (
112
-
113
- <option key={num} value={num + 1}>
114
-
115
- {num + 1990}
116
-
117
- </option>
118
-
119
- ))}
120
-
121
- </optgroup>
122
-
123
- </Select>
124
-
125
- </FormControl>
126
-
127
- <FormControl sx={{ m: 1, minWidth: 120 }}>
128
-
129
- <InputLabel htmlFor="grouped-native-select">month</InputLabel>
130
-
131
- <Select native defaultValue="" id="grouped-native-select" label="Grouping">
132
-
133
- <option aria-label="None" value="" />
134
-
135
- <optgroup label="month">
136
-
137
- {Array.from(Array(12), (_, num) => (
138
-
139
- <option key={num} value={num + 1}>
140
-
141
- {num + 1}
142
-
143
- </option>
144
-
145
- ))}
146
-
147
- </optgroup>
148
-
149
- </Select>
150
-
151
- </FormControl>
152
-
153
- <FormControl sx={{ m: 1, minWidth: 120 }}>
154
-
155
- <InputLabel htmlFor="grouped-native-select">day</InputLabel>
156
-
157
- <Select native defaultValue="" id="grouped-native-select" label="Grouping">
158
-
159
- <option aria-label="None" value="" />
160
-
161
- <optgroup label="day">
162
-
163
- {Array.from(Array(12), (_, num) => (
164
-
165
- <option key={num} value={num + 1}>
166
-
167
- {num + 1}
168
-
169
- </option>
170
-
171
- ))}
172
-
173
- </optgroup>
174
-
175
- </Select>
176
-
177
- </FormControl>
178
-
179
- </div>
180
-
181
- </>
182
-
183
- );
184
-
185
- };
186
-
187
- export default Basic;
188
-
189
- ```
190
-
191
- **src / components / Confirm.js**
192
-
193
- ```
194
-
195
- import React from "react";
196
-
197
-
198
-
199
- const Confirm = () => {
200
-
201
- return (
202
-
203
- //I want to display the results of the answers to Basics.js, Questionnaire.js, and Optional.js in and Optional.js are displayed.
204
-
205
-
206
-
207
- <div style={{ textAlign: "center" }}>
208
-
209
- <p>性別: {性別} </p>
210
-
211
- <p>生年月日: {生年月日}</p>
212
-
213
- <p>QUESTIONS: {QUESTIONS}</p>
214
-
215
- <p>ご相談内容: {ご相談内容} </p>
216
-
217
- </div>
218
-
219
- );
220
-
221
- };
222
-
223
- export default Confirm;
224
-
225
- ```
226
-
227
- **src / components / contents.js**
228
-
229
- ```
230
74
 
231
75
  import React from "react";
232
76
 
@@ -238,13 +82,9 @@
238
82
 
239
83
  import StepLabel from "@mui/material/StepLabel";
240
84
 
241
- import Button from "@mui/material/Button";
242
-
243
- import Typography from "@mui/material/Typography";
244
-
245
85
  import Basic from "./Basic";
246
86
 
247
- import Questionnaire, { QUESTIONS } from "./Questionnaire";
87
+ import Questionnaire from "./Questionnaire";
248
88
 
249
89
  import Optional from "./Optional";
250
90
 
@@ -252,69 +92,57 @@
252
92
 
253
93
 
254
94
 
255
- function getSteps() {
95
+ export const UserInputData = React.createContext();
256
-
257
- return ["お客様の情報を入力して下さい", "以下にお答え下さい", "ご相談下さい", "以下の内容をご確認下さい"];
258
-
259
- }
260
96
 
261
97
 
262
98
 
263
- const StepContent = ({ stepIndex, questionnaireProps }) => {
99
+ function Content() {
264
100
 
265
- switch (stepIndex) {
101
+ const [currentState, setCurrentState] = React.useState({});
266
102
 
267
- case 0:
103
+ const value = {
268
104
 
269
- return <Basic />;
105
+ currentState,
270
106
 
271
- case 1:
107
+ setCurrentState,
272
108
 
273
- return <Questionnaire {...questionnaireProps} />;
109
+ };
274
110
 
275
- case 2:
111
+ function getSteps() {
276
112
 
277
- return <Optional />;
278
-
279
- case 3:
280
-
281
- return <Confirm />;
282
-
283
- default:
284
-
285
- return "Unknown stepIndex";
113
+ return ["お客様の情報を入力してください", "以下にお答えください", "ご相談ください", "以下の内容をご確認ください"];
286
114
 
287
115
  }
288
116
 
289
- };
290
117
 
291
- function Content() {
292
118
 
293
- const [activeStep, setActiveStep] = React.useState(0);
119
+ function getStepContent(stepIndex) {
294
120
 
295
- const [answers, setAnswers] = React.useState(Array(QUESTIONS.length).fill(null));
121
+ switch (stepIndex) {
296
122
 
297
- const steps = getSteps();
123
+ case 0:
298
124
 
299
- const handleNext = () => {
125
+ return <Basic handleNext={handleNext} />;
300
126
 
301
- setActiveStep((prevActiveStep) => prevActiveStep + 1);
127
+ case 1:
302
128
 
303
- };
129
+ return <Questionnaire handleNext={handleNext} handleBack={handleBack} />;
304
130
 
305
- const handleBack = () => {
131
+ case 2:
306
132
 
307
- setActiveStep((prevActiveStep) => prevActiveStep - 1);
133
+ return <Optional handleNext={handleNext} handleBack={handleBack} />;
308
134
 
309
- };
135
+ case 3:
310
136
 
311
- const handleReset = () => {
137
+ return <Confirm handleBack={handleBack} />;
312
138
 
313
- setActiveStep(0);
139
+ default:
314
140
 
315
- };
141
+ return "Unknown stepIndex";
316
142
 
317
- const buttonDisabled = activeStep === 1 && answers.some((a) => !a);
143
+ }
144
+
145
+ }
318
146
 
319
147
  return (
320
148
 
@@ -338,41 +166,11 @@
338
166
 
339
167
  </Stepper>
340
168
 
341
- {activeStep === steps.length ? (
169
+ <UserInputData.Provider value={value}>
342
170
 
343
- <div>
171
+ {getStepContent(activeStep, handleNext, handleBack)}
344
172
 
345
- <Typography>全ステップの表示を完了</Typography>
346
-
347
- <Button onClick={handleReset}>リセット</Button>
348
-
349
- </div>
350
-
351
- ) : (
352
-
353
- <div>
354
-
355
- <Typography>
356
-
357
- <StepContent stepIndex={activeStep} questionnaireProps={{ answers, setAnswers }} />
358
-
359
- </Typography>
360
-
361
- <Button disabled={activeStep === 0} onClick={handleBack}>
362
-
363
- 戻る
364
-
365
- </Button>
173
+ </UserInputData.Provider>
366
-
367
- <Button variant="contained" color="primary" onClick={handleNext} disabled={buttonDisabled}>
368
-
369
- {activeStep === steps.length - 1 ? "送信" : "次へ"}
370
-
371
- </Button>
372
-
373
- </div>
374
-
375
- )}
376
174
 
377
175
  </Grid>
378
176
 
@@ -382,168 +180,8 @@
382
180
 
383
181
  }
384
182
 
183
+
184
+
385
185
  export default Content;
386
186
 
387
187
  ```
388
-
389
- **src / components / Optional.js**
390
-
391
- ```
392
-
393
- import React from "react";
394
-
395
- import { Grid } from "@mui/material";
396
-
397
- import Tooltip from "@mui/material/Tooltip";
398
-
399
- import TextField from "@mui/material/TextField";
400
-
401
-
402
-
403
- const Optional = () => {
404
-
405
- return (
406
-
407
- <div>
408
-
409
- <Grid container>
410
-
411
- <Grid sm={2} />
412
-
413
- <Grid lg={8} sm={8} spacing={10}>
414
-
415
- <Tooltip title="ご相談内容を記入することができます" placement="top-start" arrow>
416
-
417
- <TextField
418
-
419
- label="ご相談内容"
420
-
421
- fullWidth
422
-
423
- margin="normal"
424
-
425
- rows={4}
426
-
427
- multiline
428
-
429
- variant="outlined"
430
-
431
- placeholder="その他ご要望等あれば、ご記入ください"
432
-
433
- />
434
-
435
- </Tooltip>
436
-
437
- </Grid>
438
-
439
- </Grid>
440
-
441
- </div>
442
-
443
- );
444
-
445
- };
446
-
447
- export default Optional;
448
-
449
- ```
450
-
451
- **src / components / Questionnaire.js**
452
-
453
- ```
454
-
455
- import React from "react";
456
-
457
- import Typography from "@mui/material/Typography";
458
-
459
- import Radio from "@mui/material/Radio";
460
-
461
- import RadioGroup from "@mui/material/RadioGroup";
462
-
463
- import FormControlLabel from "@mui/material/FormControlLabel";
464
-
465
- import FormControl from "@mui/material/FormControl";
466
-
467
- import FormLabel from "@mui/material/FormLabel";
468
-
469
-
470
-
471
- export const QUESTIONS = [
472
-
473
- "現在、生命保険に加入されていますか?",
474
-
475
- "現在、入院中ですか。また、3ヶ月以内に医師の診察・検査の結果、入院・手術をすすめられたことがありますか?",
476
-
477
- "過去、5年以内に病気やケガで手術を受けたことまたは継続して7日以上の入院をしたことはありますか?",
478
-
479
- ];
480
-
481
-
482
-
483
- const Questionnaire = ({ answers, setAnswers }) => {
484
-
485
- const handleAnswer = (answeredIndex, answer) => {
486
-
487
- setAnswers(answers.map((e, i) => (i === answeredIndex ? answer : e)));
488
-
489
- };
490
-
491
- return (
492
-
493
- <div>
494
-
495
- <FormControl component="fieldset">
496
-
497
- {answers
498
-
499
- .filter((_, i) => i === 0 || answers[i - 1])
500
-
501
- .map((answer, i) => (
502
-
503
- <React.Fragment key={i}>
504
-
505
- <FormLabel component="legend">{QUESTIONS[i]}</FormLabel>
506
-
507
- {answer ? (
508
-
509
- <Typography>{answer === "yes" ? "はい" : "いいえ"}</Typography>
510
-
511
- ) : (
512
-
513
- <RadioGroup
514
-
515
- row
516
-
517
- aria-label="gender"
518
-
519
- name="row-radio-buttons-group"
520
-
521
- onChange={(_evt, value) => {handleAnswer(i, value);
522
-
523
- }}
524
-
525
- >
526
-
527
- <FormControlLabel value="yes" control={<Radio />} label="はい" />
528
-
529
- <FormControlLabel value="no" control={<Radio />} label="いいえ" />
530
-
531
- </RadioGroup>
532
-
533
- )}
534
-
535
- </React.Fragment>
536
-
537
- ))}
538
-
539
- </FormControl>
540
-
541
- </div>
542
-
543
- );
544
-
545
- };
546
-
547
- export default Questionnaire;
548
-
549
- ```

7

文章訂正

2021/11/06 11:09

投稿

edu
edu

スコア35

test CHANGED
@@ -1 +1 @@
1
- Basics.js、Question.js、Optional.jsでの回答結果を Confirm.js で表示したい
1
+ 『TypeError: Cannot destructure property '性別' of 'values' as it is undefined. 』を改善したい
test CHANGED
@@ -1,14 +1,12 @@
1
1
  ReactでMaterial-UIを使用して、Webフォームを作成します。
2
2
 
3
- **Basics.js、Question.js、Optional.jsで回答した結果をConfirm.js表示したいです。**
3
+ **『TypeError: Cannot destructure property '性別' of 'values' as it is undefined.』 src/components/Confirm.js:4の表示を改善したいです。**
4
4
 
5
5
  どうやって実装すればいいのかわからず困っています。どなたかアドバイスをお願いします。
6
6
 
7
- **問題解決のために行ったこと**
7
+ **期待する動作**
8
-
8
+
9
- useContext利用して、Confirm.jsを実装し、確認画面基本情報と質問に対する回答を表示させましたが、
9
+ Basics.js、Question.js、Optional.jsでの回答結果をConfirm.jsで表示したい。
10
-
11
- エラーが発生するので、他の実装方法があれば教えていただきたいです。
12
10
 
13
11
 
14
12
 
@@ -200,7 +198,7 @@
200
198
 
201
199
  const Confirm = () => {
202
200
 
203
- return <div style={{ textAlign: "center" }}>
201
+ return (
204
202
 
205
203
  //I want to display the results of the answers to Basics.js, Questionnaire.js, and Optional.js in and Optional.js are displayed.
206
204
 
@@ -208,19 +206,17 @@
208
206
 
209
207
  <div style={{ textAlign: "center" }}>
210
208
 
211
- <ListGroup style={{ maxWidth: "600px", margin: "auto" }}>
212
-
213
- <ListGroup.Item>性別: {性別} </ListGroup.Item>
209
+ <p>性別: {性別} </p>
214
-
210
+
215
- <ListGroup.Item>生年月日: {生年月日}</ListGroup.Item>
211
+ <p>生年月日: {生年月日}</p>
216
-
212
+
217
- <ListGroup.Item>QUESTIONS: {QUESTIONS}</ListGroup.Item>
213
+ <p>QUESTIONS: {QUESTIONS}</p>
218
-
214
+
219
- <ListGroup.Item>ご相談内容: {ご相談内容} </ListGroup.Item>
215
+ <p>ご相談内容: {ご相談内容} </p>
220
-
221
- </ListGroup>
216
+
222
-
223
- </div>;
217
+ </div>
218
+
219
+ );
224
220
 
225
221
  };
226
222
 

6

文章訂正

2021/11/06 00:41

投稿

edu
edu

スコア35

test CHANGED
File without changes
test CHANGED
@@ -204,6 +204,22 @@
204
204
 
205
205
  //I want to display the results of the answers to Basics.js, Questionnaire.js, and Optional.js in and Optional.js are displayed.
206
206
 
207
+
208
+
209
+ <div style={{ textAlign: "center" }}>
210
+
211
+ <ListGroup style={{ maxWidth: "600px", margin: "auto" }}>
212
+
213
+ <ListGroup.Item>性別: {性別} </ListGroup.Item>
214
+
215
+ <ListGroup.Item>生年月日: {生年月日}</ListGroup.Item>
216
+
217
+ <ListGroup.Item>QUESTIONS: {QUESTIONS}</ListGroup.Item>
218
+
219
+ <ListGroup.Item>ご相談内容: {ご相談内容} </ListGroup.Item>
220
+
221
+ </ListGroup>
222
+
207
223
  </div>;
208
224
 
209
225
  };

5

文章訂正

2021/11/05 15:21

投稿

edu
edu

スコア35

test CHANGED
@@ -1 +1 @@
1
- 【React】質問の回答を確認画面に表示させたい
1
+ Basics.js、Question.js、Optional.jsでの回答結果 Confirm.js で表示たい
test CHANGED
@@ -1,71 +1,19 @@
1
- ReactでMaterial-UI を使用して、Web フォームを作成しています。
1
+ ReactでMaterial-UIを使用して、Webフォームを作成します。
2
-
3
-
4
-
2
+
5
- **components / Content.js の case 3: 以下に、質問の回答を表示させる確認画面を作成したいです。**
3
+ **Basics.js、Question.js、Optional.js回答した結果Confirm.jsで表示したいです。**
6
-
7
-
8
-
4
+
9
- 色々調べたのですが、のよ実装したら良いかわからない状況で、詰まっています。
5
+ どうやって実装すればいのかわからず困っています。どなたかアドバイスをお願いします。
10
-
11
- 何方かアドバイスをお願いします。
6
+
12
-
13
-
14
-
15
- **期待する動作**
16
-
17
- components / Content.js の case 3: 以下に、質問の回答を表示させる確認画面を作成したいです。**
18
-
19
-
20
-
21
-
22
-
23
- **問題解決のため行ったこと**
7
+ **問題解決のため行ったこと**
24
-
25
- Web フォームなどの記事を検索したが、
8
+
26
-
27
- classコンポーネントで書いてある記事が多く、
28
-
29
- 色々試したがうまく連動できなかった。
30
-
31
-
32
-
33
- **index.js**
34
-
35
- ```
36
-
37
- import React from 'react';
38
-
39
- import ReactDOM from 'react-dom';
40
-
41
- import './index.css';
42
-
43
- import App from './App';
44
-
45
- import reportWebVitals from './reportWebVitals';
9
+ useContextを利用して、Confirm.jsを実装し、確認画面で基本情報と質問に対する回答を表示させましたが、
46
-
47
-
48
-
49
- ReactDOM.render(
10
+
50
-
51
- <React.StrictMode>
52
-
53
- <App />
54
-
55
- </React.StrictMode>,
11
+ エラーが発生するので、他の実装方法があれば教えていただきたいです。
56
-
57
- document.getElementById('root')
12
+
58
-
59
- );
13
+
60
-
61
- reportWebVitals();
62
-
63
- ```
64
14
 
65
15
  **App.js**
66
16
 
67
-
68
-
69
17
  ```
70
18
 
71
19
  import "./App.css";
@@ -102,16 +50,174 @@
102
50
 
103
51
  ```
104
52
 
105
-
106
-
107
- **src / components / contents.js**
53
+ **src / components / Basics.js**
108
-
109
-
110
54
 
111
55
  ```
112
56
 
113
57
  import React from "react";
114
58
 
59
+ import Radio from "@mui/material/Radio";
60
+
61
+ import RadioGroup from "@mui/material/RadioGroup";
62
+
63
+ import FormControlLabel from "@mui/material/FormControlLabel";
64
+
65
+ import FormControl from "@mui/material/FormControl";
66
+
67
+ import FormLabel from "@mui/material/FormLabel";
68
+
69
+ import InputLabel from "@mui/material/InputLabel";
70
+
71
+ import Select from "@mui/material/Select";
72
+
73
+
74
+
75
+ const Basic = () => {
76
+
77
+ return (
78
+
79
+ <>
80
+
81
+ <div style={{ textAlign: "center" }}>
82
+
83
+ <FormControl component="fieldset">
84
+
85
+ <FormLabel component="legend">- 性別 -</FormLabel>
86
+
87
+ <RadioGroup row aria-label="gender" name="row-radio-buttons-group">
88
+
89
+ <FormControlLabel value="male" control={<Radio />} label="男性" />
90
+
91
+ <FormControlLabel value="female" control={<Radio />} label="女性" />
92
+
93
+ </RadioGroup>
94
+
95
+ </FormControl>
96
+
97
+ </div>
98
+
99
+ <div style={{ textAlign: "center" }}>
100
+
101
+ <FormLabel component="legend">- 生年月日 -</FormLabel>
102
+
103
+ <FormControl sx={{ m: 1, minWidth: 120 }}>
104
+
105
+ <InputLabel htmlFor="grouped-native-select">year</InputLabel>
106
+
107
+ <Select native defaultValue="" id="grouped-native-select" label="Grouping">
108
+
109
+ <option aria-label="None" value="" />
110
+
111
+ <optgroup label="year">
112
+
113
+ {Array.from(Array(2020), (_, num) => (
114
+
115
+ <option key={num} value={num + 1}>
116
+
117
+ {num + 1990}
118
+
119
+ </option>
120
+
121
+ ))}
122
+
123
+ </optgroup>
124
+
125
+ </Select>
126
+
127
+ </FormControl>
128
+
129
+ <FormControl sx={{ m: 1, minWidth: 120 }}>
130
+
131
+ <InputLabel htmlFor="grouped-native-select">month</InputLabel>
132
+
133
+ <Select native defaultValue="" id="grouped-native-select" label="Grouping">
134
+
135
+ <option aria-label="None" value="" />
136
+
137
+ <optgroup label="month">
138
+
139
+ {Array.from(Array(12), (_, num) => (
140
+
141
+ <option key={num} value={num + 1}>
142
+
143
+ {num + 1}
144
+
145
+ </option>
146
+
147
+ ))}
148
+
149
+ </optgroup>
150
+
151
+ </Select>
152
+
153
+ </FormControl>
154
+
155
+ <FormControl sx={{ m: 1, minWidth: 120 }}>
156
+
157
+ <InputLabel htmlFor="grouped-native-select">day</InputLabel>
158
+
159
+ <Select native defaultValue="" id="grouped-native-select" label="Grouping">
160
+
161
+ <option aria-label="None" value="" />
162
+
163
+ <optgroup label="day">
164
+
165
+ {Array.from(Array(12), (_, num) => (
166
+
167
+ <option key={num} value={num + 1}>
168
+
169
+ {num + 1}
170
+
171
+ </option>
172
+
173
+ ))}
174
+
175
+ </optgroup>
176
+
177
+ </Select>
178
+
179
+ </FormControl>
180
+
181
+ </div>
182
+
183
+ </>
184
+
185
+ );
186
+
187
+ };
188
+
189
+ export default Basic;
190
+
191
+ ```
192
+
193
+ **src / components / Confirm.js**
194
+
195
+ ```
196
+
197
+ import React from "react";
198
+
199
+
200
+
201
+ const Confirm = () => {
202
+
203
+ return <div style={{ textAlign: "center" }}>
204
+
205
+ //I want to display the results of the answers to Basics.js, Questionnaire.js, and Optional.js in and Optional.js are displayed.
206
+
207
+ </div>;
208
+
209
+ };
210
+
211
+ export default Confirm;
212
+
213
+ ```
214
+
215
+ **src / components / contents.js**
216
+
217
+ ```
218
+
219
+ import React from "react";
220
+
115
221
  import { Grid } from "@mui/material";
116
222
 
117
223
  import Stepper from "@mui/material/Stepper";
@@ -124,6 +230,220 @@
124
230
 
125
231
  import Typography from "@mui/material/Typography";
126
232
 
233
+ import Basic from "./Basic";
234
+
235
+ import Questionnaire, { QUESTIONS } from "./Questionnaire";
236
+
237
+ import Optional from "./Optional";
238
+
239
+ import Confirm from "./Confirm";
240
+
241
+
242
+
243
+ function getSteps() {
244
+
245
+ return ["お客様の情報を入力して下さい", "以下にお答え下さい", "ご相談下さい", "以下の内容をご確認下さい"];
246
+
247
+ }
248
+
249
+
250
+
251
+ const StepContent = ({ stepIndex, questionnaireProps }) => {
252
+
253
+ switch (stepIndex) {
254
+
255
+ case 0:
256
+
257
+ return <Basic />;
258
+
259
+ case 1:
260
+
261
+ return <Questionnaire {...questionnaireProps} />;
262
+
263
+ case 2:
264
+
265
+ return <Optional />;
266
+
267
+ case 3:
268
+
269
+ return <Confirm />;
270
+
271
+ default:
272
+
273
+ return "Unknown stepIndex";
274
+
275
+ }
276
+
277
+ };
278
+
279
+ function Content() {
280
+
281
+ const [activeStep, setActiveStep] = React.useState(0);
282
+
283
+ const [answers, setAnswers] = React.useState(Array(QUESTIONS.length).fill(null));
284
+
285
+ const steps = getSteps();
286
+
287
+ const handleNext = () => {
288
+
289
+ setActiveStep((prevActiveStep) => prevActiveStep + 1);
290
+
291
+ };
292
+
293
+ const handleBack = () => {
294
+
295
+ setActiveStep((prevActiveStep) => prevActiveStep - 1);
296
+
297
+ };
298
+
299
+ const handleReset = () => {
300
+
301
+ setActiveStep(0);
302
+
303
+ };
304
+
305
+ const buttonDisabled = activeStep === 1 && answers.some((a) => !a);
306
+
307
+ return (
308
+
309
+ <Grid container>
310
+
311
+ <Grid sm={2} />
312
+
313
+ <Grid lg={8} sm={8} spacing={10}>
314
+
315
+ <Stepper activeStep={activeStep} alternativeLabel>
316
+
317
+ {steps.map((label) => (
318
+
319
+ <Step key={label}>
320
+
321
+ <StepLabel>{label}</StepLabel>
322
+
323
+ </Step>
324
+
325
+ ))}
326
+
327
+ </Stepper>
328
+
329
+ {activeStep === steps.length ? (
330
+
331
+ <div>
332
+
333
+ <Typography>全ステップの表示を完了</Typography>
334
+
335
+ <Button onClick={handleReset}>リセット</Button>
336
+
337
+ </div>
338
+
339
+ ) : (
340
+
341
+ <div>
342
+
343
+ <Typography>
344
+
345
+ <StepContent stepIndex={activeStep} questionnaireProps={{ answers, setAnswers }} />
346
+
347
+ </Typography>
348
+
349
+ <Button disabled={activeStep === 0} onClick={handleBack}>
350
+
351
+ 戻る
352
+
353
+ </Button>
354
+
355
+ <Button variant="contained" color="primary" onClick={handleNext} disabled={buttonDisabled}>
356
+
357
+ {activeStep === steps.length - 1 ? "送信" : "次へ"}
358
+
359
+ </Button>
360
+
361
+ </div>
362
+
363
+ )}
364
+
365
+ </Grid>
366
+
367
+ </Grid>
368
+
369
+ );
370
+
371
+ }
372
+
373
+ export default Content;
374
+
375
+ ```
376
+
377
+ **src / components / Optional.js**
378
+
379
+ ```
380
+
381
+ import React from "react";
382
+
383
+ import { Grid } from "@mui/material";
384
+
385
+ import Tooltip from "@mui/material/Tooltip";
386
+
387
+ import TextField from "@mui/material/TextField";
388
+
389
+
390
+
391
+ const Optional = () => {
392
+
393
+ return (
394
+
395
+ <div>
396
+
397
+ <Grid container>
398
+
399
+ <Grid sm={2} />
400
+
401
+ <Grid lg={8} sm={8} spacing={10}>
402
+
403
+ <Tooltip title="ご相談内容を記入することができます" placement="top-start" arrow>
404
+
405
+ <TextField
406
+
407
+ label="ご相談内容"
408
+
409
+ fullWidth
410
+
411
+ margin="normal"
412
+
413
+ rows={4}
414
+
415
+ multiline
416
+
417
+ variant="outlined"
418
+
419
+ placeholder="その他ご要望等あれば、ご記入ください"
420
+
421
+ />
422
+
423
+ </Tooltip>
424
+
425
+ </Grid>
426
+
427
+ </Grid>
428
+
429
+ </div>
430
+
431
+ );
432
+
433
+ };
434
+
435
+ export default Optional;
436
+
437
+ ```
438
+
439
+ **src / components / Questionnaire.js**
440
+
441
+ ```
442
+
443
+ import React from "react";
444
+
445
+ import Typography from "@mui/material/Typography";
446
+
127
447
  import Radio from "@mui/material/Radio";
128
448
 
129
449
  import RadioGroup from "@mui/material/RadioGroup";
@@ -134,394 +454,84 @@
134
454
 
135
455
  import FormLabel from "@mui/material/FormLabel";
136
456
 
137
- import Tooltip from "@mui/material/Tooltip";
138
-
139
- import TextField from "@mui/material/TextField";
140
-
141
- import InputLabel from "@mui/material/InputLabel";
142
-
143
- import Select from "@mui/material/Select";
144
-
145
-
146
-
147
- function getSteps() {
148
-
149
- return ["お客様の情報を入力してください", "以下にお答えください", "ご相談ください", "以下の内容をご確認ください"];
150
-
151
- }
152
-
153
-
154
-
155
- function getStepContent(stepIndex) {
156
-
157
- switch (stepIndex) {
158
-
159
- case 0:
160
-
161
- return (
162
-
163
- <>
164
-
165
- {/* <DatePicker views={["year"]} label="Year only" value={selectedDate} onChange={handleDateChange} /> */}
166
-
167
- <div>
168
-
169
- <FormControl component="fieldset">
170
-
171
- <FormLabel component="legend">- 性別 -</FormLabel>
172
-
173
- <RadioGroup row aria-label="gender" name="row-radio-buttons-group">
174
-
175
- <FormControlLabel value="male" control={<Radio />} label="男性" />
176
-
177
- <FormControlLabel value="female" control={<Radio />} label="女性" />
178
-
179
- </RadioGroup>
180
-
181
- </FormControl>
182
-
183
- </div>
184
-
185
- <div>
186
-
187
- <FormLabel component="legend">- 生年月日 -</FormLabel>
188
-
189
- <FormControl sx={{ m: 1, minWidth: 120 }}>
190
-
191
- <InputLabel htmlFor="grouped-native-select">year</InputLabel>
192
-
193
- <Select native defaultValue="" id="grouped-native-select" label="Grouping">
194
-
195
- <option aria-label="None" value="" />
196
-
197
- <optgroup label="year">
198
-
199
- {Array.from(Array(2020), (_, num) => (
200
-
201
- <option key={num} value={num + 1}>
202
-
203
- {num + 1990}
204
-
205
- </option>
206
-
207
- ))}
208
-
209
- </optgroup>
210
-
211
- </Select>
212
-
213
- </FormControl>
214
-
215
- <FormControl sx={{ m: 1, minWidth: 120 }}>
216
-
217
- <InputLabel htmlFor="grouped-native-select">month</InputLabel>
218
-
219
- <Select native defaultValue="" id="grouped-native-select" label="Grouping">
220
-
221
- <option aria-label="None" value="" />
222
-
223
- <optgroup label="month">
224
-
225
- {Array.from(Array(12), (_, num) => (
226
-
227
- <option key={num} value={num + 1}>
228
-
229
- {num + 1}
230
-
231
- </option>
232
-
233
- ))}
234
-
235
- </optgroup>
236
-
237
- </Select>
238
-
239
- </FormControl>
240
-
241
- <FormControl sx={{ m: 1, minWidth: 120 }}>
242
-
243
- <InputLabel htmlFor="grouped-native-select">day</InputLabel>
244
-
245
- <Select native defaultValue="" id="grouped-native-select" label="Grouping">
246
-
247
- <option aria-label="None" value="" />
248
-
249
- <optgroup label="day">
250
-
251
- {Array.from(Array(31), (_, num) => (
252
-
253
- <option key={num} value={num + 1}>
254
-
255
- {num + 1}
256
-
257
- </option>
258
-
259
- ))}
260
-
261
- </optgroup>
262
-
263
- </Select>
264
-
265
- </FormControl>
266
-
267
- </div>
268
-
269
- </>
270
-
271
- );
272
-
273
- case 1:
274
-
275
- return (
276
-
277
- <div>
278
-
279
- <FormControl component="fieldset">
280
-
281
- <FormLabel component="legend">現在、生命保険に加入されていますか?</FormLabel>
282
-
283
- <RadioGroup row aria-label="gender" name="row-radio-buttons-group">
284
-
285
- <FormControlLabel value="yes" control={<Radio />} label="はい" />
286
-
287
- <FormControlLabel value="no" control={<Radio />} label="いいえ" />
288
-
289
- </RadioGroup>
290
-
291
-
292
-
293
- <FormLabel component="legend">
294
-
295
- 現在、入院中ですか。また、3ヶ月以内に医師の診察・検査の結果、入院・手術をすすめられたことがありますか?
296
-
297
- </FormLabel>
298
-
299
- <RadioGroup row aria-label="gender" name="row-radio-buttons-group">
300
-
301
- <FormControlLabel value="yes" control={<Radio />} label="はい" />
302
-
303
- <FormControlLabel value="no" control={<Radio />} label="いいえ" />
304
-
305
- </RadioGroup>
306
-
307
-
308
-
309
- <FormLabel component="legend">
310
-
311
- 過去、5年以内に病気やケガで手術を受けたことまたは継続して7日以上の入院をしたことはありますか?
312
-
313
- </FormLabel>
314
-
315
- <RadioGroup row aria-label="gender" name="row-radio-buttons-group">
316
-
317
- <FormControlLabel value="yes" control={<Radio />} label="はい" />
318
-
319
- <FormControlLabel value="no" control={<Radio />} label="いいえ" />
320
-
321
- </RadioGroup>
322
-
323
- </FormControl>
324
-
325
- </div>
326
-
327
- );
328
-
329
- case 2:
330
-
331
- return (
332
-
333
- <Grid container>
334
-
335
- <Grid sm={2} />
336
-
337
- <Grid lg={8} sm={8} spacing={10}>
338
-
339
- <Tooltip title="ご相談内容を記入することができます" placement="top-start" arrow>
340
-
341
- <TextField
342
-
343
- label="ご相談内容"
344
-
345
- fullWidth
346
-
347
- margin="normal"
348
-
349
- rows={4}
350
-
351
- multiline
352
-
353
- variant="outlined"
354
-
355
- placeholder="その他ご要望等あれば、ご記入ください"
356
-
357
- />
358
-
359
- </Tooltip>
360
-
361
- </Grid>
362
-
363
- </Grid>
364
-
365
- );
366
-
367
- case 3:
368
-
369
- return (
370
-
371
- <div>
372
-
373
- <FormControl component="fieldset">
374
-
375
- <FormLabel component="legend">- 性別 -</FormLabel>
376
-
377
- <InputLabel children="gender" />
378
-
379
- <InputFieldDetails>{fields.contact.gender}</InputFieldDetails>
380
-
381
- <FormLabel component="legend">- 生年月日 -</FormLabel>
382
-
383
- <InputLabel children="year" />
384
-
385
- <InputLabel children="month" />
386
-
387
- <InputLabel children="day" />
388
-
389
- <InputFieldDetails>{fields.contact.birthday}</InputFieldDetails>
390
-
391
- <FormLabel component="legend">現在、生命保険に加入されていますか?</FormLabel>
392
-
393
- <FormLabel component="legend">
394
-
395
- <InputLabel children="question1" />
396
-
397
- <InputFieldDetails>{fields.contact.question1}</InputFieldDetails>
398
-
399
- 現在、入院中ですか。また、3ヶ月以内に医師の診察・検査の結果、入院・手術をすすめられたことがありますか?
400
-
401
- </FormLabel>
402
-
403
- <InputLabel children="question2" />
404
-
405
- <InputFieldDetails>{fields.contact.question2}</InputFieldDetails>
406
-
407
- <FormLabel component="legend">
408
-
409
- 過去、5年以内に病気やケガで手術を受けたことまたは継続して7日以上の入院をしたことはありますか?
410
-
411
- </FormLabel>
412
-
413
- <InputLabel children="question3" />
414
-
415
- <InputFieldDetails>{fields.contact.question3}</InputFieldDetails>
416
-
417
- <FormLabel component="legend">ご相談内容</FormLabel>
418
-
419
- <InputLabel children="" />
420
-
421
- </FormControl>
422
-
423
- </div>
424
-
425
- );
426
-
427
- default:
428
-
429
- return "Unknown stepIndex";
430
-
431
- }
432
-
433
- }
434
-
435
-
436
-
437
- function Content() {
438
-
439
- const [activeStep, setActiveStep] = React.useState(0);
440
-
441
- const steps = getSteps();
442
-
443
- const handleNext = () => {
444
-
445
- setActiveStep((prevActiveStep) => prevActiveStep + 1);
457
+
458
+
459
+ export const QUESTIONS = [
460
+
461
+ "現在、生命保険に加入されていますか?",
462
+
463
+ "現在、入院中ですか。また、3ヶ月以内に医師の診察・検査の結果、入院・手術をすすめられたことがありますか?",
464
+
465
+ "過去、5年以内に病気やケガで手術を受けたことまたは継続して7日以上の入院をしたことはありますか?",
466
+
467
+ ];
468
+
469
+
470
+
471
+ const Questionnaire = ({ answers, setAnswers }) => {
472
+
473
+ const handleAnswer = (answeredIndex, answer) => {
474
+
475
+ setAnswers(answers.map((e, i) => (i === answeredIndex ? answer : e)));
446
476
 
447
477
  };
448
478
 
449
- const handleBack = () => {
450
-
451
- setActiveStep((prevActiveStep) => prevActiveStep - 1);
452
-
453
- };
454
-
455
- const handleReset = () => {
456
-
457
- setActiveStep(0);
458
-
459
- };
460
-
461
479
  return (
462
480
 
463
- <Grid container>
481
+ <div>
464
-
465
- <Grid sm={2} />
482
+
466
-
467
- <Grid lg={8} sm={8} spacing={10}>
468
-
469
- <Stepper activeStep={activeStep} alternativeLabel>
483
+ <FormControl component="fieldset">
484
+
470
-
485
+ {answers
486
+
487
+ .filter((_, i) => i === 0 || answers[i - 1])
488
+
471
- {steps.map((label) => (
489
+ .map((answer, i) => (
472
-
490
+
473
- <Step key={label}>
491
+ <React.Fragment key={i}>
474
-
492
+
475
- <StepLabel>{label}</StepLabel>
493
+ <FormLabel component="legend">{QUESTIONS[i]}</FormLabel>
494
+
476
-
495
+ {answer ? (
496
+
497
+ <Typography>{answer === "yes" ? "はい" : "いいえ"}</Typography>
498
+
499
+ ) : (
500
+
501
+ <RadioGroup
502
+
503
+ row
504
+
505
+ aria-label="gender"
506
+
507
+ name="row-radio-buttons-group"
508
+
509
+ onChange={(_evt, value) => {handleAnswer(i, value);
510
+
511
+ }}
512
+
513
+ >
514
+
515
+ <FormControlLabel value="yes" control={<Radio />} label="はい" />
516
+
517
+ <FormControlLabel value="no" control={<Radio />} label="いいえ" />
518
+
477
- </Step>
519
+ </RadioGroup>
520
+
521
+ )}
522
+
523
+ </React.Fragment>
478
524
 
479
525
  ))}
480
526
 
481
- </Stepper>
527
+ </FormControl>
482
-
483
- {activeStep === steps.length ? (
528
+
484
-
485
- <div>
486
-
487
- <Typography>全ステップの表示を完了</Typography>
488
-
489
- <Button onClick={handleReset}>リセット</Button>
490
-
491
- </div>
529
+ </div>
492
-
493
- ) : (
494
-
495
- <div>
496
-
497
- <Typography>{getStepContent(activeStep)}</Typography>
498
-
499
- <Button disabled={activeStep === 0} onClick={handleBack}>
500
-
501
- 戻る
502
-
503
- </Button>
504
-
505
- <Button variant="contained" color="primary" onClick={handleNext}>
506
-
507
- {activeStep === steps.length - 1 ? "送信" : "次へ"}
508
-
509
- </Button>
510
-
511
- </div>
512
-
513
- )}
514
-
515
- </Grid>
516
-
517
- </Grid>
518
530
 
519
531
  );
520
532
 
521
- }
533
+ };
522
-
523
-
524
-
534
+
525
- export default Content;
535
+ export default Questionnaire;
526
-
536
+
527
- ```
537
+ ```

4

コード訂正

2021/11/04 09:42

投稿

edu
edu

スコア35

test CHANGED
File without changes
test CHANGED
@@ -374,24 +374,50 @@
374
374
 
375
375
  <FormLabel component="legend">- 性別 -</FormLabel>
376
376
 
377
+ <InputLabel children="gender" />
378
+
379
+ <InputFieldDetails>{fields.contact.gender}</InputFieldDetails>
380
+
377
381
  <FormLabel component="legend">- 生年月日 -</FormLabel>
378
382
 
383
+ <InputLabel children="year" />
384
+
385
+ <InputLabel children="month" />
386
+
387
+ <InputLabel children="day" />
388
+
389
+ <InputFieldDetails>{fields.contact.birthday}</InputFieldDetails>
390
+
379
391
  <FormLabel component="legend">現在、生命保険に加入されていますか?</FormLabel>
380
392
 
381
393
  <FormLabel component="legend">
382
394
 
395
+ <InputLabel children="question1" />
396
+
397
+ <InputFieldDetails>{fields.contact.question1}</InputFieldDetails>
398
+
383
399
  現在、入院中ですか。また、3ヶ月以内に医師の診察・検査の結果、入院・手術をすすめられたことがありますか?
384
400
 
385
401
  </FormLabel>
386
402
 
403
+ <InputLabel children="question2" />
404
+
405
+ <InputFieldDetails>{fields.contact.question2}</InputFieldDetails>
406
+
387
407
  <FormLabel component="legend">
388
408
 
389
409
  過去、5年以内に病気やケガで手術を受けたことまたは継続して7日以上の入院をしたことはありますか?
390
410
 
391
411
  </FormLabel>
392
412
 
413
+ <InputLabel children="question3" />
414
+
415
+ <InputFieldDetails>{fields.contact.question3}</InputFieldDetails>
416
+
393
417
  <FormLabel component="legend">ご相談内容</FormLabel>
394
418
 
419
+ <InputLabel children="" />
420
+
395
421
  </FormControl>
396
422
 
397
423
  </div>

3

文章訂正

2021/10/30 11:33

投稿

edu
edu

スコア35

test CHANGED
@@ -1 +1 @@
1
- 【React】質問の回答を確認画面に表示させたい
1
+ 【React】質問の回答を確認画面に表示させたい
test CHANGED
File without changes

2

文章訂正

2021/10/29 23:32

投稿

edu
edu

スコア35

test CHANGED
@@ -1 +1 @@
1
- 【React】質問の回答を確認画面に表示させたい
1
+ 【React】質問の回答を確認画面に表示させたい
test CHANGED
File without changes

1

2021/10/29 23:30

投稿

edu
edu

スコア35

test CHANGED
File without changes
test CHANGED
File without changes