useRouter/withRouter receive undefined on query in first render

后端 未结 4 911
时光说笑
时光说笑 2021-01-05 15:01

I got a problem with my dynamic route. It look like this

[lang]/abc

I am trying to get query value from [lang] but when I using

4条回答
  •  温柔的废话
    2021-01-05 15:32

    This is a good work, I found around from this comment

    Add useQuery.ts helper file

    // useQuery.js
    import { useRouter } from 'next/router';
    
    // Resolves query or returns null
    export default function useQuery() {
      const router = useRouter();
      const hasQueryParams =
        /\[.+\]/.test(router.route) || /\?./.test(router.asPath);
      const ready = !hasQueryParams || Object.keys(router.query).length > 0;
      if (!ready) return null;
      return router.query;
    }
    

    usage

    // In your components (instead of useRouter)
    const query = useQuery();
    
    useEffect(() => {
      if (!query) {
        return;
      }
      console.log('my query exists!!', query);
    }, [query]);
    

提交回复
热议问题