実装したいこと
Reactでお問い合わせフォームを実装しています。
お問い合わせフォームに入力された内容を確認ボタンを押下し、確認画面で入力した内容が表示されるようにしたいです。
react-router-domのV6を使用し、useNavigate
を使って遷移先に値を渡し、遷移先でuseParams
を使ってURLから値を取得したいと考えています。
現状のコードから
- フォームに入力された値が遷移先に渡されること
- 渡された値を遷移先で表示されること
を実装するにはどのような記述が適切でしょうか。
typescript
1import React, { useEffect, useState } from 'react'; 2import { useParams, useNavigate } from 'react-router-dom'; 3 4function FormNew(props: any) { 5 function handleFormNew() { 6 7 navigate(`/form/${form_id}/entries/confirm`, { state: { } }) 8} 9 10 type FormData = { 11 name :string, 12 email: string, 13 content: string, 14 } 15 16 const navigate = useNavigate(); 17 const { form_id } = useParams(); 18 const [ formData, setFormData ] = useState<FormData>({ 19 name: '', 20 email: '', 21 content: '', 22 }); 23 24 const onChangeHandler = (e: React.ChangeEvent<HTMLInputElement>) => { 25 e.persist(); 26 const { id, value } = e.target 27 setFormData({ ...formData, [id]: value }) 28 } 29 30 return ( 31 <> 32 <PageTitle>お問い合わせ</PageTitle> 33 34 <PageSubTitle>名前</PageSubTitle> 35 <FormInput id="name" type="text" onChange={onChangeHandler} value={formData.nickname} /> 36 37 <PageSubTitle>Eメール</PageSubTitle> 38 <FormInput id="email" type="text" onChange={onChangeHandler} value={formData.email} /> 39 40 <PageSubTitle>お問い合わせ内容</PageSubTitle> 41 <FormTextarea id="content" onChange={onChangeHandler} value={formData.content} /> 42 43 <FormSubmit onClick={handleFormNew}> 44 確認へ 45 </FormSubmit> 46 </> 47 ) 48} 49 50export default FormNew;
typescript
1import React, { useEffect, useState } from 'react'; 2import { useParams, useNavigate } from 'react-router-dom'; 3import FormNew from '../FormNew'; 4 5const FormConfirm = () => { 6 function handleFormSend() { 7 // APIにPOSTする処理 8 } 9 10 const params = useParams(); 11 12 return ( 13 <> 14 <PageTitle>お問い合わせ確認</PageTitle> 15 16 <PageSubTitle>名前</PageSubTitle> 17 // ここにフォームの入力内容を表示する 18 <PageSubTitle>Eメール</PageSubTitle> 19 // ここにフォームの入力内容を表示する 20 <PageSubTitle>お問い合わせ内容</PageSubTitle> 21 // ここにフォームの入力内容を表示する 22 <FormSubmit onClick={handleFormSend}> 23 送信 24 </FormSubmit> 25 </> 26 ) 27}; 28 29export default FormConfirm; 30
回答1件
あなたの回答
tips
プレビュー