Nuxt 3のuseCookieで数値を表すString(例えば123)をcookieとして保存し読み出した際に自動的にNumber123)に変換されてしまう現象に遭遇したのでメモ。

これは、useCookieencodeオプションのデフォルトでは文字列をそのままCookieとして保存しているのにも関わらず、デコード時はJSONとしてデコードするため起きている。 "123"をCookieに保存する場合は123という文字列がそのまま保存されるが、これはJSONでデコードした場合Numberになってしまう。 保存する際に文字列としてエンコードしてあげればデコード時も文字列として取得できるのだがそうはなっていない。

対策としてcookieの値を文字列のまま保持するには、useCookieencodeオプションで文字列としてエンコードしてあげればいい。

const cookie = useCookie(
   'your-cookie-name', 
   { encode: (value) => JSON.stringify(value)}
)