838 文字
4 分

Frontend Weekly 2024-10-25

Next.js 15#

Next.js 15 がリリースされた。

https://nextjs.org/blog/next-15

マイグレーションガイドに加えて、codemod も公開されている。

https://nextjs.org/docs/app/building-your-application/upgrading/version-15

デフォルトキャッシュの無効化または変更#

破壊的な変更として、fetch や GET ルートハンドラー、クライアントルーターのデフォルトのキャッシュ戦略に次のような変更が加えられた。

  • Fetch のキャッシュオプションをno-storeに変更
    • キャッシュを有効化したい場合は、fetch のキャッシュオプションにforce-cacheを指定するなどの対応が必要
    • 余談:今までデフォルトがforce-cacheであるという説明が稀に見られたが、Dynamic functions 以降はno-storeになるなど最適だと思われるオプションが自動的に選択されていたため不正確
  • GET ルートハンドラーのデフォルトキャッシュを無効化
    • キャッシュを有効化したい場合は、GET ルートハンドラを定義したファイルでexport dynamic = 'force-static'を指定するなどの対応が必要
  • クライアントルーターがデフォルトでページコンポーネントをキャッシュしないように変更
    • ただし、一部の動作は変更されない
      • Partial Rendering を引き続きサポートするため、共有レイアウトデータはサーバーから refetch されない
      • ブラウザがスクロール位置を復元できるように、Back/forward navigation ではキャッシュが有効
    • 余談:このキャッシュへの理解が不十分であり、例えば商品データを追加したのに一覧に反映されないバグが稀に見られた。revalidatePathなどによる明示的な再検証が必要

Async Request APIs#

cookiesheadersparamssearchParamsなどの API が非同期関数に変更された。

Form Component#

HTML のform要素の拡張であり、送信時に共有レイアウトとクライアントの状態を保持するクライアントナビゲーションなどをサポートしており、パフォーマンスや UX の向上が期待できる。

https://nextjs.org/blog/next-15#form-component

import Form from "next/form";
export default function Page() {
return (
<Form action="/search">
<input name="query" />
<button type="submit">Submit</button>
</Form>
);
}

その他#

その他のいくつかの変更点。

Zustand v5#

Zustand v5 がリリースされた。

https://github.com/pmndrs/zustand/releases/tag/v5.0.0

新機能追加はなく、非推奨な機能などの削除が行われたのみ。

Svelte 5#

Svelte 5 がリリースされた。

https://svelte.dev/blog/svelte-5-is-alive

Preview の際、話題になっていた runes が遂にサポートされた。

let count = 0;
let count = $state(0);

Chakra UI v3#

Chakra UI v3 がリリースされた。

https://www.chakra-ui.com/blog/00-announcing-v3

Panda CSS への移行は行われず、Park UI(Ark UI) + emotion の構成になった。 また、いくつかのコンポーネントは shadcn/ui のように CLI 経由でスニペットを追加する形式になっている。

Panda CSS については、React v19 の style に期待しており、導入しない可能性があると言及されている。

We might not even have to use Panda at all. The progress of the style tag in React 19 is very promising and we give Chakra even more performance boost without any migration cost.

React Compiler を React v18 で利用する#

React Compiler がベータリリースされた。

https://react.dev/blog/2024/10/21/react-compiler-beta-release

設定を変更することで React v17 と v18 でも利用可能。

https://react.dev/learn/react-compiler#using-react-compiler-with-react-17-or-18

babel.config.js
const ReactCompilerConfig = {
target: "18", // '17' | '18' | '19'
};
module.exports = function () {
return {
plugins: [["babel-plugin-react-compiler", ReactCompilerConfig]],
};
};

Sass: @import is deprecated#

Sass の@import が v3.0.0 で廃止予定。

https://sass-lang.com/blog/import-is-deprecated/

以前からデバックが困難であるという指摘があり、@use@forwardの利用が推奨されている。

これは CSS の@importとは無関係であり、CSS の@importは廃止もされなければ非推奨でもないので注意。

Frontend Weekly 2024-10-25
https://blog.ohirunewani.com/series/frontend-weekly/2024-10-25/
作者
hrdtbs
公開日
2024-10-25
ライセンス
CC BY-NC-SA 4.0