RemixのMetaFunctionの中でURLを取得したい
公開日:
ゴール
import type { MetaFunction } from '@remix-run/node'; // or cloudflare/deno
export const meta: MetaFunction = () => {
return {
title: 'Something cool',
description: 'This becomes the nice preview on search results.',
'og:url': `${サイトのURL}`, // こいつを動的に取得したい
};
};
こんな感じでMetaFunction
の中で OGP の設定をするときにサイトの URL を動的に取得したい!
環境変数とかで URL を定義してしまってもいいけれど、動的に取得できたらありがたいなぁという願望。
ライブラリのバージョン
@remix-run/node
:v1.19.3
試行錯誤
// 公式より引用
export const meta: MetaFunction = ({ location }) => {
const searchQuery = new URLSearchParams(location.search).get('q');
return [{ title: `Search results for "${searchQuery}"` }];
};
location
という引数は取れるようだが、
// locationの中身
{
pathname: '/news',
search: '',
hash: '',
state: null,
key: 'default'
}
pathname
だけで、origin
までは取得できず
結論
loader
のrequest
パラメーターから取得する。
https://remix.run/docs/en/main/route/loader#request
request
パラメーターから url が取得できるので
// loader
export async function loader({ request }: LoaderArgs) {
const url = new URL(request.url);
const origin = url.origin;
return json({
origin,
});
}
// meta
export const meta: MetaFunction = ({ data }) => {
const { origin } = data;
return {
'og:url': origin,
};
};
こんな感じでできた。
最後に
MetaFunction
は内部でごちゃごちゃやる感じじゃなくて、単に情報を meta タグでレンダリングするだけの役割なんですね。ごちゃごちゃするのはloader
の役目っぽい。
では
Bye