lewar

lewar

準備例 - 「キッチンシンク」とは何ですか

体験 @tanstack/router は簡単ではないことを発見しました - Next.js を ' 祛魅 ' しました。

以前、Next.js は非常に成熟していると思っていましたが、@tanstack/router のドキュメントを読んで、世界はまだ広がっていると感じました。

ドキュメントには stackblitz の例があり、非常に包括的です。しかし、実際にプロジェクトのコードとページを実践して、最適な実践例を見つけようとしたとき、提供された例がどれだけ素晴らしいかを知りました。
以前に例が良いと感じたのは、n 年前に webpack の公式リポジトリに例があったとき、next.js に例があったとき、plasmo に例があったとき、非常に多くの with-xxx の例があったからです。
今回例が良いと感じたのは、常に realworld のプロジェクトや具体的な実践を探していたからです。それは一般的なシナリオがすべてカバーされているという要件を満たしており、すべてのシナリオを網羅する例があるはずだと思いました。

コーディングの困難に直面する#

私は実践を始め、2 つの技術を組み合わせる際に非常に柔軟であり、最適な方法を選ぶことができないように感じました。最も基本的な方法を選んで組み合わせました(1 つのファイルに関連する接着剤コードをすべて貼り付ける)。次に、頻繁に使用するコードを共通のファイルに抽出し、シングルトンの再利用を保持するなど、無限の最適化を行いたいと思いました。パラメータの位置が増えると、適切に分割する必要があります。これは私が事前に考えていなかったものであり、または、それに触れた後、その作業に陥る可能性があります。最適な実践を見つけることを最も期待しています。

今、私はまだ読み終えていないが、最適な実践を感じています。

一緒に Ktichen Sink の例を見てみましょう#

機能の体験#

  1. パラメータの制御パネルのデモ、私の心をつかみました。すべてがスキャフォールディングとページの切り替えの重要なパラメータに直接影響を与えます。
    image

  2. シナリオリスト:

  • ベーシック:ログイン / 非ログイン、レイアウト、遅延読み込み、ネストされたルーター
  • ベースを非表示:URL パラメータに対応するストアのロジック;パラメータのシリアライズ;パラメータ -> 依存関係 -> ローダーの処理
  • インタラクション:ルーターのローダーの保留状態の処理;作成された状態の処理
  • ディープインタラクション:リンクのプリロード

コードの詳細 - 技術ポイントの組み合わせ方法#

一度読んで、公式ドキュメントの内容を自分の言葉で要約するようなものです。省略せず、直接コピーせず、収穫があるようにします。

  1. auth
    ロード順序 - beforeLoad でリダイレクトロジックを追加します。
    コンテキストを追加し、依存関数のインジェクションを避けるために使用します。したがって、コンテキストも制限され、巨大なチャンクを追加しないように注意する必要があります。

API の設計上、イベントサイクルの段階を分割し、カバーするシナリオに基づいて分割します。理論的には自由に拡張できますが、非常に制限されて成功したものだけが人気のあるフレームワークになることができます。
未解決の問題:ログインボタンのローディングの処理はどうすればよいですか?同様に、ログアウトの処理もありますか?ログインに成功した後、invalidate を呼び出し、ローダーでログイン済みかどうかをチェックし、ログイン後のデフォルトページにリダイレクトするロジック

  1. layout
    • ファイル名またはフォルダの前に_layout を付けるか、_layout.route.tsx
    • ここでは、通常の ``==`./index`を細分化し、[`` == `/route` | `../[foldername]` , `/` == `/index` ] に変えました。
  2. data-loader with @tanstack/query
    私の単純な考え - コンポーネントコードに useQuery を追加し、通常の使用と同じです。
    考えを打ち破る - 組み込みのローダーとは一致せず、クエリの状態を現在のルーターに渡すこともできません。また、コンテキストは統一されたインジェクションポイントであり、各ルーターに独立したスペースを与えません。
    kitchen-sink の方法:queryClient をコンテキストに配置し、ローダーで queryClient の ensureQueryData を使用し、コンポーネントで同じオプションを使用して同じデータを取得します。
  3. data-loader の状態処理
    <MatchRoute />コンポーネントが提供されており、少し直感に合わないです。そのパラメータはフィルターパラメータであり、私は settle パラメータだと思っていました。私の習慣は通常、useXXX を使用して判断することです。しかし、ここでは、関数型の children を使用して変更に応答します。
  4. @tanstack/query 内の dataMutation
    @tanstack/query の useMutation と同じで、組み合わせて使用する新しい方法はありません。

最初の読み終えました。一部の祛魅を感じました。今、一部を実践し、わからないことがあるかどうかを見てみます。あれば、さらに記録を続けます。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。