やりたいこと
こんにちは!Next.js+tsでtsxを書いています。関数コンポーネントを使ってフォーム内にIDを入力し、送信ボタンを押すと、ある外部のヘルパーが呼び出される実装を考えています。
このIDの入力が存在すれば、ヘルパーが起動する方針です。
(helper.jsはあるサービスにデータを渡すモーダルが出力される機能を提供しています)
具体的にやりたいことは次の2つです
1.onSubmit内でpublicIdのstateを触りたい
2.HelperにpublicIdを渡したい
実装方法
1.→onSubmitのタイミングでid = true にして、ヘルパーを立ち上げる
2.→このときに、idをHelperに渡す
やったこと
IDの有無に関わらず、「ヘルパーを出力する」を押すと、「IDが見つかりません」というエラーメッセージがhelper.jsのモーダルとして現れました。
1.→デベロッパーツールで確認すると、idが渡っていないことが確認できた
2.→Helperのstateも変更されていない様子
できていいないこと&所感
1→onsubmitで id = true になっていない
2 →Helperにidを渡せていない...getvalueとregisterを訂正する必要あり?
ソースコード
Typescript
1import { ReactElement, useEffect, useState } from 'react' 2import { useForm } from 'react-hook-form' 3 4function Opener(): ReactElement { 5 const { handleSubmit, getValues, register } = useForm() 6 const [isOpen, setIsOpen] = useState(false) 7 8 const onSubmit = (): void => { 9 setIsOpen(true) 10 } 11 12 return ( 13 <div> 14 {{ isOpen } && <Helperid={getValues()}></Helper>} 15 <div className="relative top-10"> 16 <div className="text-center"> 17 <div className="relative mt-4 pt-2"> 18 {/* //このタイミングでpublicIdをuseStateしたい */} 19 <form onSubmit={handleSubmit(onSubmit)}> 20 <input className="pl-4 w-full focus:outline-blue bg-transparent h-14" /> 21 <input 22 {...register} 23 type="submit" 24 value="ヘルパーを開く" 25 className="opener" 26 /> 27 </form> 28 </div> 29 </div> 30 </div> 31 </div> 32 ) 33} 34 35function Helper(props: { id: string }): null { 36 const { id } = props 37 useEffect(() => { 38 const existingScript = document.getElementById('hoge_ul') 39 if (!existingScript) { 40 const script = document.createElement('script') 41 script.src = 'https://helper.test.hogehoge.io/v2/helper.js' 42 script.id = 'helper_ul' 43 document.body.appendChild(script) 44 script.onload = () => { 45 const data = new Data({ 46 id: { id }, 47 openerSelector: '.opener', 48 }) 49 } 50 }, []) 51 return null 52} 53 54export default Helper 55
ここ1週間でNext.jsを触り始めたので、よくわかっていないことが多いです。。
Helper関数は問題がないと思ってますが、何か間違えている点をご指摘いただければ幸いです
回答1件
あなたの回答
tips
プレビュー