前提
TypeScriptでuseStateのXXX及びsetXXXを別の関数オブジェクトに引数として渡す処理をいくつか書いて試している際、
渡し手:
typescript
1function App(){ 2const [left,setLeft]=useState(<></>); 3Left1(setTest);
受け取り手:
typescript
1function Left1(setTest:(value: React.SetStateAction<JSX.Element>) => void){ 2setTest(<></>);
コンパイルエラーは発生しませんでしたが、ブラウザで確認すると上のコードの一行下のエラーが発生しないであろう行をエラー発生源として表示し、処理が中断されていました。
念のため、そのエラー発生源として指摘された部分を削除してみたところ、そのまた一行下のエラーが発生していなかった行がエラーとして指摘されたためコンソールのエラー出力のミスだと思い、一番怪しい処理を今回質問内容として投稿しました
error
1Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: 21. You might have mismatching versions of React and the renderer (such as React DOM) 32. You might be breaking the Rules of Hooks 43. You might have more than one copy of React in the same app
> ブラウザで確認するとエラーが発生していて、処理が中断されていました。
そのコードが原因だと、どのように確認しましたか?
すみません、たしかにエラーの発生源として、スタックトレースに指摘される部分は、実際のコードのsetText(<></>)の一行下と指摘されますが、その該当業を消すとまたそのひとつ下の行が指摘されるため、エラーの表示ズレだと推測し、一番怪しい処理を今回質問として記載しました。
Left1は通常の関数でしょうか、それとも関数コンポーネントでしょうか?
> その該当業を消すとまたそのひとつ下の行が指摘されるため
もしかして、当該の2行はuse***の呼び出しではありませんか?
はい、そのとおりでございます。
しかし、この2行は元々エラーが出ていない行でして、この受け渡しの処理をすることで、エラー発生源としてマークされました
function Left1(){と定義し、Left1(setText)という形で利用呼び出ししています。
しかし、呼び出しのみで、帰り値を
domに追加する処理はまだ書いていません。
回答1件
あなたの回答
tips
プレビュー