Puck は React 用のオープンソース ビジュアル エディターであり、次世代のページ ビルダーとノーコード製品を強化します。 GitHub でスターを付けてください! ⭐️
パックは急速に成長しており、見るのは素晴らしいです! ?あらゆる背景を持つ開発者が、このオープンソースのビジュアル エディターでできることの限界を押し広げています。しかし、Puck に興味を持つ人が増えるにつれて、Discord コミュニティでは 1 つの質問が上がり続けています。
「Puck のコンポーネント間でデータを渡したり、状態を共有したりするにはどうすればよいですか?」
言い換えると、あるコンポーネントが別のコンポーネントの変更にどのように反応するのでしょうか?たとえば、検索入力を使用して DropZone コンポーネントを作成し、その中にドロップされたリストがその値を読み取れるようにすることができます。
最初は、Puck に組み込まれた魔法を見て、Puck が独自の方法で状態を処理していると思われるかもしれません。しかし重要なのは、Puck は単なる React であり、Puck に渡すコンポーネントも同様です。 つまり、コンポーネント間のデータの管理と共有に通常使用する状態ライブラリやツールを利用できるということです。この記事では、シンプルにして、Context を使用してこの問題を解決する方法を説明します。
始める前に: Puck とその仕組みについて基本的に理解していることを前提とします。初めての方でも大丈夫です。ぜひフォローしてください。ただし、基本を理解するために、最初にスタート ガイドを確認することをお勧めします
作業を簡単にするために、Puck がプリインストールされ、すぐに使用できる基本的な React プロジェクトを GitHub 上に準備しました。ターミナルで次のコマンドを実行して、クローンを作成してインストールします:
git clone https://github.com/FedericoBonel/basic-puck-app cd ./basic-puck-app npm install
すでに既存のプロジェクトに取り組んでいますか?全く問題ありません! NPM を使用して Puck を依存関係としてインストールするだけです:
npm i @measured/puck --save
Next.js や Remix などのフレームワークを使用している場合、Puck はセットアップ プロセスをシームレスにするための公式レシピを提供します。
このチュートリアルでは、物事をわかりやすくするために GitHub リポジトリのクローンを作成したと仮定します。ただし、この概念と手順はどのセットアップにも当てはまります。プロジェクトの構造に合わせて必要に応じてファイル名を更新するだけです。
プロジェクトの準備が整ったら、次のステップは Puck を構成することです。 src/App.jsx ファイルを開き、その内容を以下のコードと入れ替えます。これにより、2 つのコンポーネントをドラッグ アンド ドロップするための基本的な構成で Puck がセットアップされます:
git clone https://github.com/FedericoBonel/basic-puck-app cd ./basic-puck-app npm install
すごいですね!基本的なセットアップはこれで完了です。次に、共有状態をエディタに追加する方法を見てみましょう。
React Context は、エディターの内外のすべてのコンポーネント間でデータを共有および管理する簡単な方法を提供するため、私たちの問題に対する完璧な解決策です。必要なときにいつでもアクセスできる「グローバル状態」を作成するため、選択したテーマやログイン ユーザーなど、Puck の外部からデータを取り込んだり、Puck コンポーネント間でデータを共有したりする必要があるシナリオに最適です。
このガイドでは、Puck 内の React Context の 2 つの一般的な使用例を説明します。
Puck でのコンテキストのセットアップは、他の React アプリと同じパターンに従います。コンテキスト プロバイダーを作成して、共有状態を定義および管理し、それを親コンポーネントの周囲にラップし、アプリ内で必要な場所にある状態にアクセスまたは更新します。
まず、ユーザー データの新しいコンテキストを作成します。このコンテキストには、ユーザー オブジェクトとユーザー状態を更新する関数の両方が含まれます。
npm i @measured/puck --save
次に、Puck エディターをラップする UserProvider コンポーネントを作成します。このプロバイダーはユーザーの状態を管理し、すべての子がそれを利用できるようにします。
簡潔にするために、ダミーのユーザーと useState から返されるセッター関数を使用しています。
// App.jsx import { Puck, DropZone } from "@measured/puck"; import "@measured/puck/puck.css"; // The configs for your draggable components // Ideally you would pull these out into their own files const dashboardConfig = { render: () => { return ( <div > <p>Once you’ve updated the file, start the application in development mode, and navigate to http://localhost:5173 to verify everything is working as expected:<br> </p> <pre class="brush:php;toolbar:false">npm run dev
プロバイダーを Puck エディターと統合するには、エディターを UserProvider でラップするだけです。 UserProvider はコンポーネント ツリー内のエディターの上の任意の場所 (インデックス ファイル内など) に配置でき、問題なく動作します。これを完了すると、すべてのエディター コンポーネントがコンテキストにアクセスできるようになります!
git clone https://github.com/FedericoBonel/basic-puck-app cd ./basic-puck-app npm install
これで、任意の Puck コンポーネントの UserContext にアクセスできるようになりました。ユースケースの例に従って、ログイン ユーザーに対して「おかえり」メッセージを表示し、ゲストに対して「一般的なようこそ」メッセージを表示するようにダッシュボード コンポーネントを更新しましょう。
npm i @measured/puck --save
ここで、コンテキスト プロバイダー内にドロップされたコンポーネントのコンテキストを読み取ります。この例では、ユーザーが DropZone 経由でダッシュボード内にネストした ArticleList コンポーネント内のコンテキストを使用します。これにより、ArticleList が検索クエリの変更に応答し、それに応じて更新できるようになります。
// App.jsx import { Puck, DropZone } from "@measured/puck"; import "@measured/puck/puck.css"; // The configs for your draggable components // Ideally you would pull these out into their own files const dashboardConfig = { render: () => { return ( <div > <p>Once you’ve updated the file, start the application in development mode, and navigate to http://localhost:5173 to verify everything is working as expected:<br> </p> <pre class="brush:php;toolbar:false">npm run dev
ここでエディターに移動し、ダッシュボード コンポーネントをキャンバスにドラッグし、その中に ArticleList をドロップして、initialQuery フィールドを変更すると、リストがクエリに基づいて記事を動的にフィルターしていることがわかります。 ?
コンテンツが異なる複数のリスト コンポーネントを使用して同じクエリ コンテキストを再利用することで、この設定を拡張することもできます。
?それで終わりです!これで、ネストされた Puck コンポーネント間で状態が共有されました。 ?
✅長所:
❌短所:
エディターの複雑さに応じて、Puck での共有状態の管理を改善できる方法がたくさんあります。
Puck での共有状態管理を次のレベルに引き上げることで、動的でリアクティブなページ ビルダーを構築する可能性の世界が広がります。これらの戦略を使用して皆さんが構築するユニークで強力なアプリを見るのが楽しみです。
この記事が何かを構築するきっかけになった場合、Puck について質問がある場合、または貢献したい場合は、次の方法で参加できます。
Puck の未来、そしてノーコードのイノベーションはあなたの手の中にあります。今日から構築を始めて、何ができるかを一緒に再定義しましょう! ?
以上がPuck でのアプリケーションの状態の管理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。