|
皆さん、こんにちは。Pitangです。金曜日にGitHubでRemixがトレンドになっているのを見て、大きな可能性を感じました。Remixの機能について少し調べてみたので、皆さんと共有したいと思います。 最近、React Routerのオリジナルチームが開発したフルスタックWebフレームワーク「Remix」が正式にオープンソース化されました。TypeScriptとReactをベースとし、React Router V6の機能を組み込んでいます。現在、GitHubの総合トレンドリストでトップ3にランクインし、5,000以上のスターを獲得しています。 Remixはオープンソース化されて以来、Reactフルスタックフレームワーク分野で大きな話題を呼んでおり、Next.jsの強力な競合相手として間違いなく考えられます。Remixの機能は以下のとおりです。
こんなにたくさんの機能があるなんてすごいですね!Remix の機能を一つずつ説明していきましょう 🚀。 一貫した開発経験Remix はファイルベースのルーティングを提供します。これにより、データの読み取り、操作、レンダリングのロジックを同じルートファイルに記述できるため、一貫性が向上します。これにより、クライアントとサーバーのロジック間で同じ型定義セットを共有できます。 以下は公式サイトからのコードの一部です。
上記はルートファイルです。もしこれが src/routes/posts/index.tsx というファイルであれば、サーバーを起動して localhost:3000/posts 経由でアクセスすることでアクセスできます。これはルートファイルです。デフォルトでエクスポートされる Projects 関数はReact関数コンポーネントです。この関数によって返されるテンプレートは、このルートにアクセスするためのHTMLドキュメントです。
`action` 関数は `<Form method="post">` フォーム内にあり、ユーザーが送信ボタンをクリックした後に自動的に呼び出される点に注目すべきです。Remix は Fetch API を介してこの関数を呼び出し、フロントエンドを継続的にポーリングして呼び出し結果を取得し、ユーザーが複数回クリックした場合の競合を自動的に処理します。 上記のコードによってレンダリングされるページは次のようになります。 アプリのウェブサイト全体は、`<Document>` 要素と `<Layout>` 要素がネストされた構造になっています。`<Outlet>` 要素は、上の図で緑色で示されているように、ルートが埋め込まれる場所です。`localhost:3000/` にアクセスすると、埋め込まれるコンテンツは `src/routes/index.tsx` ルートファイルに対応するレンダリングされたコンテンツであり、`localhost:3000/admin` にアクセスすると、埋め込まれるコンテンツは `src/routes/admin.tsx` ルートファイルのレンダリングされたコンテンツです。 `src/routes/admin.tsx` ファイルは引き続き `<Outlet>` ルートコンポーネントを提供します。つまり、`http://localhost:3000/admin/new` へのアクセスなど、階層構造(ネスト)のルートを追加すると、この `<Outlet>` は対応するルートファイル `src/routes/admin/new.tsx` の内容をレンダリングします。逆に、`http://localhost:3000/admin` にアクセスすると、`<Outlet>` セクションは対応するルートファイル `src/routes/admin/index.tsx` の内容をレンダリングします(下の図を参照)。 このネストされたルーティングは自動的に行われます。`src/routes/admin.tsx` というファイルを作成し、同じ名前のフォルダを作成し、さらにそのフォルダ内に他のファイルを作成すると、これらのファイル名が次のレベルのネストされたルートの名前として登録されます。
このアプローチでは、ファイルをルートとして使用し、同じ名前のフォルダー内にネストされたルートを使用して、ルートを親ページ内に実装します。 上で説明したネストされたルーティングの明らかな利点の 1 つは、特定の部分でエラーが発生した場合に、ErrorBoundary セクションと CatchBoundary セクション (後述) でエラー ページを表示できる一方で、ユーザーはページ全体を更新して再読み込みすることなく他の部分を操作できるため、Web サイトのフォールト トレランスが大幅に向上することです。 さようなら、読み込み状態ネストされたルートを使用することで、Remix はほぼすべての読み込み状態とスケルトン画面を排除できます。現在、多くのアプリケーションはフロントエンドコンポーネント内でデータを取得し、最初のデータを取得した後、そのデータを使用して後続のデータを取得するという、ウォーターフォール型のフェッチパターンを形成しています。データ量が多いと、ページの読み込みに時間がかかります。そのため、多くのウェブサイトでは、ユーザーエクスペリエンスを向上させるために、回転するホイールなどの読み込み状態やスケルトン画面を組み込んでいます。以下はその例です。 これは、これらのアプリケーションにはRemixのようなネストされたルートの概念が欠けているためです。ルートにアクセスすると、そのルートに対応するページにアクセスします。ページが読み込まれ、その中の子コンポーネントがレンダリングされた後にのみ、データが取得され、子コンポーネントが再度読み込まれます。このプロセスが繰り返されるため、ウォーターフォール型の読み込みと、多くの中間読み込み状態が発生します。 Remixはネストされたルーティングを提供します。localhost:3000/admin/new ルートにアクセスすると、3階層のルートがロードされます。同時に、これら3つのルートに対応するページが独立して並列にロードされ、データも独立して並列に取得されます。最終的に、次のように完全なHTMLドキュメントがクライアントに送信されます。 ご覧の通り、最初の画面にコンテンツが表示されるまでに少し時間がかかるかもしれませんが、読み込み状態になる必要はもうありません。デイジー型の画面👋🏻、スケルトン画面👋🏻とはお別れです。
さらに、Remix はネストされたルートを活用し、リンクにマウスオーバーした際に、クリックしてサブルートを切り替えるための事前準備としてプリフェッチ機能を提供します。これにより、サブルートのドキュメントや、CSS、画像、関連データなど、様々なリソースを事前に取得できます。これにより、実際にリンクをクリックしてサブルートを切り替える際に、ページが即座に表示されます。 エラー処理の改善当社のウェブサイトは頻繁に問題が発生しています。他のフレームワークを使用すると、問題が発生した際にユーザーがウェブサイトを更新する必要があるかもしれません。しかし、Remixではネストされたルートの概念に基づいているため、更新の必要はありません。エラーメッセージは、問題のあるサブルートに表示されるだけで、ページの残りの部分は正常に機能し続けます。 例えば、上の画像の右下にあるサブルートに問題がある場合、問題が発生するとこの部分にはエラー ページが表示されますが、ページの他の部分には通常の情報が表示されます。 さまざまなクライアント側およびサーバー側のエラー、予期されるエラーと予期されないエラーなど、エラーは頻繁に発生し、処理が非常に困難であるため、Remix には、React の ErrorBoundary に似た概念を提供する堅牢なエラー処理メカニズムが組み込まれています。 Remix では、各ルーティング関数は ErrorBoundary 関数に対応します。
ErrorBoundary関数は、ローダー、アクション、クライアント、またはサーバーからの予期しないエラーを処理します。予期しないエラーが発生すると、この関数が起動され、エラーを示す対応するUIメッセージが表示されます。 各ルーティング関数は CatchBoundary 関数にも対応しています。
CatchBoundary関数は、クライアントまたはサーバー上でローダーまたはアクション関数で手動でスローされるレスポンスエラー、つまり想定されるエラーに対応します。これらのエラーのパスは予測可能です。CatchBoundaryでは、スローされたレスポンスエラーはuseCatchフックを通じて取得され、対応するエラー情報がUIに表示されます。 子ルートにErrorBoundary関数またはCatchBoundary関数を追加しないと、エラーは次の上位レベルのルート、つまり最上位ルートページまで伝わってしまいます。したがって、最上位ルートファイルではErrorBoundary関数とCatchBoundary関数をそれぞれ1つだけ宣言し、起こり得るすべてのエラーを捕捉してコードレビュー中に迅速に特定できるようにすることが最善です。 Webインフラストラクチャ技術に基づくRemix は、フルスタック Web 開発フレームワークに必要なすべての状態と基本コンポーネントを提供しながら、HTML/CSS や HTTP などの基本的な Web テクノロジを使用して問題を解決することに重点を置いています。 関連する州は次のとおりです。
ウェブサイトを構成する基本的なコンポーネントは次のとおりです。
さらに、ルーティング機能を含むファイル内で、`link`、`meta`、`links`、`headers` などの関数を宣言することで、対応する機能を宣言できます。
ご覧のとおり、Remix はフルスタック Web 開発ライフサイクル全体に必要なほぼすべてのものを提供し、最小限の労力で高性能で高品質の Web サイトを開発できるようにするためのベスト プラクティスも含まれています。 もちろん、この記事ではRemixの機能を全て網羅することはできません。ここまで読んでRemixにまだご興味がおありでしたら、公式サイト(https://remix.run/)で詳細をご確認ください。公式サイトでは、Remixを使った実用的なアプリケーション開発に役立つ、非常に詳細なチュートリアルを提供しています。 Remix の機能について理解できたので、どう思いますか?Next.js を超えることができると思いますか?🐴 |
Next.js の強力なライバルが登場しました! Remix が正式にオープンソース化を発表しました。
関連するおすすめ記事
-
17 のアクティブなオープンソース検索エンジン プロジェクトから、知識コンテンツ関連のアプリケーション ソリューションのテクノロジを選択します。
-
MLSQL は、新世代のオープンソース言語エコシステムの構築を目指して、正式に Byzer に改名されました。
-
GitHubで5月に最も人気のオープンソースプロジェクトトップ10
-
Sunがオープンソース開発者会議CommunityOneを主催
-
WordPress は 94 か国の従業員をどのように管理しているのでしょうか?
-
国境のないオープンソース、共に未来を創る:SUSECON北京2022オープンソースサミットとSUSE30周年記念式典が盛大に開催