memo @240225*
React の最新機能
Actions
従来React
でform
要素を使うときは基本的にonClick
onSubmit
を使って送信処理を行ったけれど(React Hook Form
を使っててもonSubmit
の属性の中にhandleSubmit
を定義し処理を行う)onSubmit
とかonClick
は基本的にJavaScript
を必要とするフォーム送信処理であるためユーザーがJavaScript
をオフにしてたら動かない。なのでProgressive Enhancement
という考え方からするとあまりよろしくなかったのが以前のReact
。そこにActions
が出てきてaction
属性を介するやり方ならJavaScript
をオフにしてても機能する。そっちの方がアクセシビリティもいい。
action
はブラウザ側で処理させることもできるしuse server
を使用することによってサーバー側に処理させることもできる。そこは実装者に委ねられてるけど基本的にはuse server
で行うべき。action
を使用するときはuseFormStatus
useFormState
などのReact
の新しいhooks
を使って状態を取得するのが一般的。form
のaction
はReact
専用の属性ではなくHTML
標準でついてるもの。ただHTML
標準のform
要素のaction
を使うと基本的にページがリフレッシュされる(送信処理に入ってユーザーが他の処理をすることはできなくなる)けどもReact
のaction
を使うとトランジション
(React
の裏側)で送信されて画面全体が動かなくなることはない。action
は非同期関数もサポートしてるためトランジション
でasync/await
も使えるし処理中であるというisPending
を取得することもできる。
もし<Calendar onSelect={eventHandler}>
というコンポーネントを使ってライブラリを作ってたら<Calendar selectAction={action}>
のようにしてRSC
でも動くようにすることが大切。
<form action={search}>
<input name="query" />
<button type="submit">Search</button>
</form>
New Features in React Canary
React Canaries
によってReact
のリリース戦略が変わる。。バグがあるかも知れないけどもReact
の新機能をより早く知ることができる。
Directives
:use client
use server
use client
を使ったらクライアント側にJSを送る
(バンドラーに<script>
タグを生成するように指示する)
use server
を使ったらバンドラーに POST エンドポイント (tRPC Mutations
など) を生成するように指示する。use server
でServer Actions
を使うと裏側では POST エンドポイントを作成してそれを呼び出してる。API
を作らずにサーバー側にリクエストを送ってるように見えるけども内部的には POST エンドポイントを自動で生成しそれを呼び出してる。
Document Metadata
: <title>
<meta>
<link>
などmetadata
タグはクライアント側だけじゃなくSSRでもRSCでも同じように機能するようになった。
Asset Loading
:スタイルシート、フォント、スクリプトなどの外部アセットを読み込むタイミングを調整できるようになった。イメージ的にはNext.js
はnext/script
というスクリプトタグを使うと<script>
を読み込むタイミングを調整できる。それがReact
公式でもできるようになったという話。
React19
ではWeb Component
のサポートのような破壊的変更を伴うけども長年の要望に応える改善も追加される。
Offscreen (renamed to Activity).
Offscreen
という機能の名称がActivity
に変更される。