/index.js
のリンクをクリックすると、/about.js
ページに移動します。ただし、URLを介してパラメーター名(/ about?name = leangchheanなど)を/index.js
から/about.js
に渡すと、それを取得する方法がわかりません/about.js
ページ。
index.js
import Link from 'next/link'
export default () => (
<div>Click <Link href={{ pathname: 'about', query: { name: 'leangchhean' }}}><a>here</a></Link> to read more</div>
)
url
propはNext.jsバージョン6として非推奨です: https://github.com/zeit/next.js/blob/master/errors/url-deprecated.md
クエリパラメータを取得するには、getInitialProps
を使用します。
import Link from 'next/link'
const About = ({query}) => (
<div>Click <Link href={{ pathname: 'about', query: { name: 'leangchhean' }}}><a>here</a></Link> to read more</div>
)
About.getInitialProps = ({query}) => {
return {query}
}
export default About;
class About extends React.Component {
static getInitialProps({query}) {
return {query}
}
render() {
console.log(this.props.query) // The query is available in the props object
return <div>Click <Link href={{ pathname: 'about', query: { name: 'leangchhean' }}}><a>here</a></Link> to read more</div>
}
}
クエリオブジェクトは次のようになります:url.com?a=1&b=2&c=3
になります:{a:1, b:2, c:3}
ルーターフックの使用はどうですか?
アプリの任意のコンポーネントでuseRouter hook
を使用できます。
https://github.com/zeit/next.js/#userouter
import Link from "next/link";
<Link href={{ pathname: '/search', query: { keyword: 'this way' } }}><a>path</a></Link>
import Router from 'next/router'
Router.Push({
pathname: '/search',
query: { keyword: 'this way' },
})
import { useRouter } from 'next/router'
export default () => {
const router = useRouter()
console.log(router.query);
...
}
static exportsで動作するソリューションをお探しの場合は、ここにリストされているソリューションを試してください: https://github.com/zeit/next .js/issues/4804#issuecomment-4607544
簡単に言うと、router.query
はSSRアプリでのみ機能しますが、router.asPath
は引き続き機能します。
したがって、exportPathMap(動的ではない)を使用して、next.config.js
でクエリの事前エクスポートを構成できます。
return {
'/': { page: '/' },
'/about': { page: '/about', query: { title: 'about-us' } }
}
}
または、router.asPath
を使用し、 query-string のようなライブラリを使用して自分でクエリを解析します。
import { withRouter } from "next/router";
import queryString from "query-string";
export const withPageRouter = Component => {
return withRouter(({ router, ...props }) => {
router.query = queryString.parse(router.asPath.split(/\?/)[1]);
return <Component {...props} router={router} />;
});
};