Site icon image World Hacker(ぎょうざブログ)

Think Different, Connect Dots for Line.

【Next.js】decodeURI(”hoge”) hoge日本語を含んだ文字列

【前提】

Notionで記事を管理し、Next.jsでフロントエンドを構築されている方。

【現象】

日本語を含んだURLは、getStaticPathsでルーティングがうまくいかないことがあります。

【原因&解決策】

URLエンコードされない文字列だけを想定して開発されているのでれば

例として、以下のようなコードでURLのルーティングが可能になります。

export const getStaticPaths: GetStaticPaths = async () => {
  const { results }: { results: Record<string, any>[] } = await fetchPages({});

  const pathSet: Set<string> = new Set();
  for (const page of results) {
    for (const tag of getMultiSelect(page.properties.tags.multi_select)) {
      pathSet.add(tag);
    }
  }

  const paths = Array.from(pathSet).map((tag) => {
    return {
      params: {
        tag: tag,
      },
    };
  });

  return {
    paths: paths,
    fallback: "blocking",
  };
};

export const getStaticPaths: GetStaticPaths = async () => {
	// 中略
  const paths = Array.from(pathSet).map((tag) => {
    return {
      params: {
        tag: decodeURI(tag),
      },
    };
  });
	// 中略
};