「next/router」のuseRouter()
を使用して_localhost:3000/post?loc=100
_のようなURLパターンからクエリを取得し、サーバーからそのIDを使用してデータをフェッチしようとしていました。ステートレス機能コンポーネントで使用するとうまくいきました。
しかし、「無効なフックコール」を示すページが表示されます。ステートレス機能コンポーネントのgetInitalProps()
を呼び出してみましたが、そこでも機能せず、同じエラーが表示されました。この方法を使用するためのルールはありますか?
React LibraryとNext.js Frameworkを使用してフロントエンドを開発していました。
_constructor(props) {
this.state = {
loc: useRouter().query.loc,
loaded: false
};
}
_
React Hooksには規約があります。フックの名前はuse
で始まります。 Reactは組み込みまたは公式のフックを提供しますが、明らかに、独自のフックを作成できます。
useRouter
は明らかにフックです。機能コンポーネントで使用できます。クラスコンポーネントでは使用できません。機能コンポーネントの内部では、次のように使用できます。
function MyComponent(){
const router = useRouter();
}
一方、withRouter
はHOCであるhigher order component
であるため、機能コンポーネントとクラスコンポーネントの両方で使用できます。しかし、クラスコンポーネントでは、選択肢がありません。 withRouter
を使用する必要があります。
結論として、これは公式ドキュメントです:To inject the pathname, query or asPath in your component, you can use the useRouter hook, or withRouter for class components.