この記事は composer によって書かれたもので、React Context Composer を段階的にカプセル化する方法を紹介するチュートリアル コラムです。
React Context Composer を段階的にカプセル化するにはどうすればよいですか?
モチベーション
React の状態管理ソリューションは Redux、Mobx、Recoil など多数あります。これまで私は Redux しか経験したことがありませんでしたが、まだ少し面倒だと思います。私は通常、多くのフックを作成するため、useContext フックを備えた Context Provider を使用することを好みます。これにより、状態の分割と結合が簡単になります。ここでは、各状態管理ソリューションの長所と短所については説明しませんが、Context を使用するときに発生する多層ネストの問題に焦点を当てます。
下の図は、私が最近書いていた taro 反応フック ts プロジェクトから抽出したコードです。いくつかのグローバル状態を分割し (分割の目的は不必要な再レンダリングを減らすことです)、それらをネストしました。この書き方はコールバック地獄に支配されているような感覚を思い出させ、非常に不快です。そこで、自分で上位コンポーネントを封印し、記述上の構造を「フラット化」することを考えました。
<LoadingContext.Provider value={{ loading, setLoading }}> <UserDataContext.Provider value={{ name: "ascodelife", age: 25 }}> <ThemeContext.Provider value={"light"}> {/* ....more Providers as long as you want */} </ThemeContext.Provider> </UserDataContext.Provider> </LoadingContext.Provider>
最も簡単な解決策
ここでは、reduceRight を使用して Provider のネストを完了する最初の解決策を簡単に作成しました。
ここで、reduce の代わりに ReduceRight が使用されている理由は、外側の層から内側の層への書き込み順序により慣れているためです。
// ContextComposer.tsx import React from 'react'; type IContextComposerProps = { contexts: { context: React.Context<any>; value: any }[]; }; const ContextComposer: React.FC<IContextComposerProps> = ({ contexts, children }) => { return ( <> {contexts.reduceRight((child, parent) => { const { context, value } = parent; return <context.Provider value={value}>{child}</context.Provider>; }, children)} </> ); }; export default ContextComposer; // App.tsx <ContextComposer contexts={[ { context: ThemeContext, value: "light" }, { context: UserDataContext, value: { name: "ascodelife", age: 25 } }, { context: LoadingContext, value: { loading, setLoading } }, ]}> { children } </ContextComposer>
実際に体験してみると、使えるものの、開発体験は少し悪いことが分かりました。問題は、コンポーネントがパラメーターに入るときに渡される値の型が any であることです。これは、 ts の静的型チェックが放棄されていることを意味します。パラメーターを渡すとき、値に対して静的型チェックが行われないため、コードを入力するときにコード プロンプトが表示されないだけでなく、比較的低レベルのランタイム エラーが発生する可能性があります。悪いレビュー!
React.cloneElement() に基づく変換計画
#上記のスキームを変換するために、比較的不人気ではあるが使いやすい関数に注目しました— React.cloneElement().この関数について注目すべき点はそれほど多くありません。主に 3 つの入力パラメータを見てください。最初のパラメータは親要素、2 番目は親のプロパティ、3 番目は残りのパラメータ (子を除く) です。最初のパラメータ。これを除き、他のすべての値はオプションです。
例:
<!-- 调用函数 --> React.cloneElement(<div/>,{},<span/>); <!-- 相当于创建了这样一个结构 --> <div> <span></span> </div>
次に、変換を開始しましょう。reduceRight フレームは変更されません。入力パラメータのタイプとreduceRight コールバックを変更します。
// ContextComposer.tsx import React from 'react'; type IContextComposerProps = { contexts: React.ReactElement[]; }; const ContextComposer: React.FC<IContextComposerProps> = ({ contexts, children }) => { return ( <> {contexts.reduceRight((child, parent) => { return React.cloneElement(parent,{},child); }, children)} </> ); }; export default ContextComposer; // App.tsx <ContextComposer contexts={[ <ThemeContext.Provider value={"light"} />, <UserDataContext.Provider value={{ name: "ascodelife", age: 25 }} />, <LoadingContext.Provider value={{ loading, setLoading }} />, ]}> { children } </ContextComposer>
変換後、パラメーターを渡すと、実際にコンポーネントを作成しているように見えます (もちろん、コンポーネントは実際に作成されますが、コンポーネント自体は仮想 Dom にレンダリングされず、実際にはレンダリングされます。クローンコピーです)。同時に、先ほど注目した値の静的型チェックの問題も解決されました。
ヒント: React.cloneElement(parent,{},child) は React.cloneElement(parent,{children:child}) と同等ですが、その理由はわかりますか?
関連リソース
ソース コードは github (https://github.com/ascodelife/react-context-provider-composer) に同期されています。
これは、npm ウェアハウス (https://www.npmjs.com/package/@ascodelife/react-context-provider-composer) にもパッケージ化されています。ぜひ体験してください。
以上がReact Context Composer をカプセル化するための詳細な手順 (共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Composerは、PHPプロジェクトの開発手順を簡素化します。1)composer.jsonの「laravel/framework」の追加などの依存関係の追加。 2)名前空間とclassPathを定義することにより、自動的にロードし、autoload.phpファイルを生成します。 3)ComposerDump-Autoload-OおよびComposerInstallを使用して、パフォーマンスを最適化します-No-DEV-OPTIMIZE-AUTOLOADERコマンド。これらの手順を通じて、開発者はより効率的になり、一般的な間違いを回避できます。

作曲家になることの重要な要素には次のものがあります。1。音楽理論の習得、2。創造的でオリジナルであること、3。技術的なスキルを持っている、4。感情を表現し、物語を語ることができる。5。文化的および歴史的背景を理解する、6。

作曲家になるための手順には次のものがあります。1。ノート、リズム、ハーモニー、メロディーなどの音楽の基本的な要素をマスターします。 2。abletonliveなどの適切な技術ツールを選択します。 3.インスピレーションの獲得、概念、執筆、修正、改善など、作曲のプロセスを理解する。 4.シンプルなメロディーの作成から始めて、ハーモニーなどの複雑なテクニックを徐々に試します。 5.ノート選択やリズム配置などのデバッグ技術を通じて一般的な問題を解決します。 6.テンプレートの使用、バージョン制御、コラボレーションなど、パフォーマンスの最適化とベストプラクティスを適用します。

Composerは、依存関係管理を簡素化し、開発効率とコードの品質を向上させるため、堅牢なPHPアプリケーションを構築するための重要なツールです。 1)Composerは、Composer.jsonファイルを介してプロジェクトの依存関係を定義し、これらの依存関係を自動的にダウンロードおよび管理します。 2)composer.lockファイルを生成して、依存関係バージョンが一貫しており、ベンダー/autoload.phpを介して自動的に読み込まれていることを確認します。 3)使用の例には、ログライブラリの追加などの基本的な使用法や、バージョンの制約や環境変数管理などの高度な使用法が含まれます。 4)一般的なエラーデバッグ手法には、依存関係の競合とネットワークの問題の処理が含まれます。 5)パフォーマンス最適化の提案には、Composer.Lockファイルの使用と自動負荷の最適化が含まれます。

作曲家を使用するときに熟練するには、次のスキルをマスターする必要があります。1。composer.jsonとcomposer.lockファイルを使用するのに熟練している必要があります。2。作曲家の仕組み、3。マスターコンポーザーのコマンドラインツール、4。基本的および高度な使用法を理解します。

Composerは、PHPの依存関係管理ツールであり、プロジェクトの依存関係を宣言、ダウンロード、管理するために使用されます。 1)Composer.jsonファイルを介して依存関係を宣言します。2)ComposerInstallコマンドを使用して依存関係をインストールし、3)依存関係ツリーを解析し、Packagistからダウンロードします。4)Autoload.phpファイルを生成して自動荷重を簡素化します。

AppComposerは、アプリケーションを構築および管理するためのツールです。 1)事前定義されたコンポーネントをドラッグして構成することにより、アプリケーションの開発を簡素化し、効率を向上させます。 2)開発者は、コンポーネントを定義し、インターフェイスを組み合わせ、ビジネスロジックを定義し、最終的にアプリケーションをレンダリングできます。 3)タスク管理や条件付きレンダリングなど、基本的および高度な使用法をサポートし、柔軟なアプリケーションの構築に役立ちます。

作曲家は、PHPの依存関係管理ツールです。 Composerを使用するコアステップは次のとおりです。1)「Stripe/Stripe-PHP」などのComposer.jsonの依存関係を宣言:「^7.0」; 2)ComposerInStallを実行して、依存関係をダウンロードおよび構成します。 3)Composer.LockおよびAutoload.phpを介してバージョンとオートロードを管理します。 Composerは依存関係管理を簡素化し、プロジェクトの効率と保守性を向上させます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 中国語版
中国語版、とても使いやすい
