聞きたいこと
React/NextjsにてWebアプリを作成しています。
pageコンポーネントにて定義していたロジックを、カスタムコンポーネントに移動した際に動作しなくなってしまったため質問させてください。
詳細
もともとページコンポーネントに実装していた内容は下のとおりです。
- pages/index.ts
javascript
1import * as React from 'react'; 2import { useRouter } from 'next/router'; 3 4// これはバックエンドAPIと疎通してユーザー情報を取得する関数です 5import { fetchUser } from '@/repositories'; 6: 7 8const Index: React.FC = (): React.ReactElement => { 9 const router = useRouter(); 10 const { id } = router.query; 11 let user = {}; 12 13 React.useEffect(() => { 14 fetchUser(id).then((u) => { 15 user = u; 16 }) 17 }, [router]) 18 19 return ( 20 <div>Index Page {user}</div> 21 ) 22}
上で実装したuseEffectの部分をカスタムフックとして外出しした結果が下のとおりです。
- pages/index.ts
javascript
1import * as React from 'react'; 2 3: 4 5const Index: React.FC = (): React.ReactElement => { 6 const user = useUser(); 7 8 return ( 9 <div>Index Page {user}</div> 10 ) 11}
- hooks/index.ts
import * as React from 'react'; import { useRouter } from 'next/router'; import { fetchUser } from '@/repositories'; : export const useUser = () => { const router = useRouter(); const { id } = router.query; let user = {}; React.useEffect(() => { fetchUser(id).then((u) => { user = u; }) }, [router]) return user; } :
カスタムフック移行後は、カスタムフック内で定義したuser変数を返すようにしていますが、
pageコンポーネント内で表示すると、user変数の初期値である空のオブジェクトになってしまいます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。