Nextjs AppRouter個人的気になる点をまとめる
はじめに
こんにちわ!こんばんわ!ご観覧ありがとうございます。
定期的に雑色な記事を投稿します。(タイトルは記事のメインの内容にしてますが)
基本的には抱えている問題を改善し、改善方法を記事にしてアップしようと考えています。
今回の内容
AppRouterの気になった機能をつらつら書いていきます。
前回の内容
前回記事
パフォーマンス無関心で作ったサイトのパフォーマンスチューニング番外編 Nextjs AppRouter(色々試す2) - zare926のブログ
NextjsのAppRouterのRoute Handlers(API)ついて書きました。
SEOタグの設定
import type { Metadata } from 'next' export const metadata: Metadata = { title: 'タイトルです!', description: '説明です!', }
PageRouterの時は以下の方法でLighthouseが100点を出すそうです。
これはAppRouterいい仕事してますね。
何回も同じFetchすな!(Request Memoization)
簡単にいうと親子で同じFetchをしていたら1個にまとめてくれます!
1回しかFetchせず、データを使いまわしてくれます。
これはちょっと前にcacheを調べた時に起きてましたね。
確か、fetchの設定は親が優先されたはずです。
とりあえず優しい
Server Actions
まず、stableな機能ではないので注意です。
import db from './db'; import { redirect } from 'next/navigation'; async function create(formData: FormData) { 'use server'; const post = await db.post.insert({ title: formData.get('title'), content: formData.get('content'), }); redirect(`/blog/${post.slug}`); } export default function Page() { return ( <form action={create}> <input type="text" name="title" /> <textarea name="content" /> <button type="submit">Submit</button> </form> ); } //https://nextjs.org/blog/next-13-4#server-actions-alpha
簡潔にまとめると、APIで実装したいCreate処理などを直接書き込めちゃいます。
'use server';
こいつが肝です
関数が複数ある場合は、ファイルの一番上に定義することも可能です。
てことはクライアントサイドには、見えないコードができるはずなので、見せたくないものを見せないようになどの使い方もできそうです。
fetch関数も使わなくてすみます。
一応設定が必要
next.config.js
module.exports = { experimental: { serverActions: true, }, }
サーバーコンポーネントでは、UIコンポーネントが使えない!!
MUIやChakra UIが使えません!
サーバーでは動かせないemotionを使っているからだそうです。
クライアントコンポーネントで使用することはできます。
Chakra UIでこうしろと書いてありました。
最後に
調べて気になったのはこの辺りでしたね。
統括してまとめてるサイトは結構あるんですが、メモして自分も記憶出るようにと書いてみました。
ここまで読んでいただいてありがとうございました!!