先日、私の知り合いから次のようなメッセージが届きました。
「休暇中に、投資収益がどのように機能するかを Zoom で息子に説明しようとしていたのですが、もし二人とも Google ドキュメントのようなものを使って作業できたら、とても簡単だったでしょう。」
チャレンジを受け付けました!
ここ数日間、私は複数のパラメーターに基づいて投資収益を予測できる投資収益シミュレーターを構築して楽しかったです。
インターネットにはそのような Web サイトがたくさんありますが、この Web サイトでは、共同機能を組み込む方法と、それらがどのようにして人々を結びつけることができるのかを探りたかったのです。
このガイドでは、バックエンド コードを記述したり、Web ソケットを処理したりせずに、わずか 10 分で通常の React アプリにリアルタイム コラボレーションを追加する方法を説明します。おまけとして、共同 Web サイトでのユーザー エクスペリエンスを向上させる方法についても検討します!
このプロジェクトの完全なソース コードは GitHub で入手できます
飛び込んでみましょう!
出発点: 基礎の構築
コラボレーション機能に入る前に、強固な基盤が必要でした。私はまず、ユーザーが投資パラメータを入力できるシングルプレイヤー バージョンを作成しました。これらの入力は、投資収益予測を生成および表示する計算エンジンに入力されます。
すぐに立ち上げて実行するために、bolt.new を使用しました。私は、そのクリーンなデザインと、許容できる開始点に素早くたどり着いたことに感銘を受けました。非常に有利なスタートにもかかわらず、かなりの計算ロジックを微調整し、好みに合わせて UI を調整する必要がありました。
アプリケーションを共同作業にする
シングルプレイヤーバージョンが完成したので、私はそれを協力的なものにすることに注意を向けました。このプロジェクトは、私がここ数か月間 Multisynq で開発してきたオープンソース ライブラリである React Together をテストする絶好の機会を提供しました。
React Together は、複雑なバックエンドのセットアップやソケット接続の管理を行わずに共同機能を実現するフックとコンポーネントを提供します。実装プロセスは簡単であることが判明しましたが、ライブラリの将来のバージョンで対処するいくつかの改善点が明らかになりました。
それでは、アプリにリアルタイム コラボレーションを追加するための 3 つの手順を見てみましょう。タイマーを開始しますか?
ステップ 1: React Together コンテキストのセットアップ
最初のステップは、アプリケーションを React Together コンテキスト プロバイダーでラップすることです。このコンポーネントは、すべての状態同期とセッション管理をバックグラウンドで処理します。
// src/index.tsx import { StrictMode } from 'react' import { ReactTogether } from 'react-together' import { createRoot } from 'react-dom/client' import App from './App.tsx' import './index.css' createRoot(document.getElementById('root')!).render( <strictmode> <reacttogether sessionparams="{{" appid: import.meta.env apikey:> <app></app> </reacttogether> </strictmode>, )
React Together は、アプリケーションの同期に Multisynq のインフラストラクチャを使用します。これには API キーが必要です。 無料 API キーは multisynq.io/account から取得できます。心配しないでください。これらのキーは公開されるようになっており、どのドメインで使用できるかを制御できるためです。
すべてのユーザーが Web サイトに入ったら自動的に同じセッションに接続するように React Together を設定できます。実際、これは 2 段階のガイドになりますが、私はコラボレーションがオプトインである Google ドキュメント スタイルのアプローチを採用しました。ユーザーは、ボタンをクリックして明示的にセッションを作成するかセッションに参加するまで、切断されたままになります。セッション管理については、このガイドの 3 番目のステップで説明します!
ステップ 2: ユーザー間で状態を同期する
React Together をセットアップしたら、次のステップはユーザー間の状態を同期することです。このプロセスは非常に簡単です。React の useState フックを React Together の useStateTogether フックに置き換えるだけです。
useStateTogether フックは useState と同様に機能しますが、追加の rtKey パラメーターが必要です。このキーはアプリケーション全体の状態を一意に識別し、ビューポート間で DOM 階層が異なる可能性がある応答性の高いレイアウトでも適切な同期を保証します。
変換の様子は次のとおりです:
// src/index.tsx import { StrictMode } from 'react' import { ReactTogether } from 'react-together' import { createRoot } from 'react-dom/client' import App from './App.tsx' import './index.css' createRoot(document.getElementById('root')!).render( <strictmode> <reacttogether sessionparams="{{" appid: import.meta.env apikey:> <app></app> </reacttogether> </strictmode>, )
// Before import { useState } from 'react' export default function Calculator() { const [startingAmount, setStartingAmount] = useState(20000); const [years, setYears] = useState(25); const [returnRate, setReturnRate] = useState(10); const [compoundFrequency, setCompoundFrequency] = useState("annually"); const [additionalContribution, setAdditionalContribution] = useState(500); const [contributionTiming, setContributionTiming] = useState("beginning"); const [contributionFrequency, setContributionFrequency] = useState("month"); // ... }
このアプローチの利点は、アプリケーションが以前とまったく同じように動作し続けることです。唯一の違いは、状態の更新が接続されているすべてのユーザー間で同期されることです。
ステップ 3: セッション管理を追加する
最後のステップは、ユーザーが共同セッションを作成、参加、退出する方法を追加することです。私は、セッション コントロールが誰にでも簡単に見えるように、電卓の上のヘッダー セクションを通じてこれを実装することにしました。
React Together は 4 つの重要なフックを提供することでこれを簡単にします。
- useIsTogether: 現在セッション中かどうかを示します
- useCreateRandomSession: 新しいプライベート セッションを作成します
- useLeaveSession: 現在のセッションから切断します
- useJoinUrl: 他の人が参加するための共有可能な URL を提供します
ヘッダー コンポーネントの簡略化されたバージョンを次に示します (クラス名を削除しただけです)。
// After import { useStateTogether } from 'react-together' export default function Calculator() { const [startingAmount, setStartingAmount] = useStateTogether("startingAmount", 20000); const [years, setYears] = useStateTogether("years", 25); const [returnRate, setReturnRate] = useStateTogether("returnRate", 10); const [compoundFrequency, setCompoundFrequency] = useStateTogether("compoundFrequency", "annually"); const [additionalContribution, setAdditionalContribution] = useStateTogether("additionalContribution", 500); const [contributionTiming, setContributionTiming] = useStateTogether("contributionTiming", "beginning"); const [contributionFrequency, setContributionFrequency] = useStateTogether("contributionFrequency", "month"); // ... }
この実装により、ユーザーはクリックするだけで共同セッションを開始できるようになりました。誰かが共有 URL を使用して参加すると、他の参加者と同じ状態がすぐに表示され、すべての変更がすべての参加者間でリアルタイムに同期されます。
それだけです。簡単で、うまくいきます。しかも10分以内で完了します!!
コラボレーションエクスペリエンスの向上
基本的な同期はうまくいきましたが、何か違和感がありました。ページ上の要素が「勝手に」変更され、誰が変更を加えたかが示されませんでした。これは共同作業アプリケーションではよくある課題であり、Google ドキュメントなどのツールは、他のユーザーがどこを表示および編集しているかを示すことでこの問題を解決します。
真のコラボレーションとは、単に状態を同期することではなく、存在感を生み出すことです。ユーザーは効果的に共同作業するためにお互いを「見る」必要があります。
私は当初、ユーザーがお互いのマウス ポインターを確認できるように、共有カーソルを実装することを検討しました。ただし、このアプローチでは、レスポンシブ Web アプリケーションに次のような課題が生じます。
- 異なるビューポート サイズ間でマウス座標がきれいにマッピングされません
- カーソルの位置にはコンテキストが欠けていることがよくあります。ユーザーのカーソルがなぜ特定の場所にあるのかは不明です
- カーソル位置の意味は、画面レイアウトが異なると曖昧になる場合があります
代わりに、ユーザー プレゼンスで本当に達成したいことに焦点を当てました。
- 他の人が積極的に存在しているとユーザーが感じられるようにします
- 各ユーザーが現在表示または編集している要素を表示します
解決策は?ユーザーが操作している要素を強調表示します。このアプローチはよりシンプルで直感的であり、すべてのビューポート サイズで確実に機能します。これを 2 つの主要な領域 (グラフ タブと入力フィールド) に実装する方法を見てみましょう。
グラフタブへのユーザープレゼンスの追加
ユーザー プレゼンスの簡単な実装から始めましょう。各グラフ タブをどのユーザーが表示しているかを示します。
このためには、各ユーザーが他の全員に表示される独自の値を持つことができる特別な種類の共有状態が必要です。
React Together は、useStateTogetherWithPerUserValues フックで必要なものを正確に提供します (はい、それはかなり長いです!)。このフックは useStateTogether と同様に機能しますが、単一の値を共有する代わりに、各ユーザーがすべての参加者に表示される独自の値を持つことができます。フックは 3 つの要素を返します:
- 現在のユーザーのローカル状態値
- ローカル状態を更新する関数
- 各ユーザーの状態値を含むオブジェクト
タブの横にユーザー アバターを表示するためにこれを実装する方法は次のとおりです:
// src/index.tsx import { StrictMode } from 'react' import { ReactTogether } from 'react-together' import { createRoot } from 'react-dom/client' import App from './App.tsx' import './index.css' createRoot(document.getElementById('root')!).render( <strictmode> <reacttogether sessionparams="{{" appid: import.meta.env apikey:> <app></app> </reacttogether> </strictmode>, )
上記のコード スニペットでは、useState を useStateTogetherWithPerUserValues に置き換えました。再度、アプリケーションは以前と同様に動作し続けましたが、全員が他の全員の状態を確認できるようになりました。次に、取得した新しい情報をレンダリングする必要がありました。
この実装では、各タブの横にユーザーのアバターが表示され、どのユーザーがどのグラフを表示しているかが明確になります。ユーザーは自分のプレゼンス インジケーターを見る必要がないため、冗長性を避けるために現在のユーザーのアバターを除外します。
入力フィールドにユーザーのプレゼンスを追加する
入力フィールドへのプレゼンス インジケーターの追加は、前の例と同様のパターンに従いますが、追加の要件があります。ユーザーがいつ編集を開始および終了したかを追跡する必要があります。幸いなことに、Ant Design のコンポーネントは、この目的に必要なコールバックを提供します。
各入力フィールドについて、次のことを行いたいと考えていました。
- 他の人が編集しているときに色付きの境界線を表示します
- 右上隅に編集者のアバターを表示します
- アプリケーション全体でユーザーごとに一貫した色を維持します
useStateTogetherWithPerUserValues フックを使用してこれを実装する方法は次のとおりです。
// src/index.tsx import { StrictMode } from 'react' import { ReactTogether } from 'react-together' import { createRoot } from 'react-dom/client' import App from './App.tsx' import './index.css' createRoot(document.getElementById('root')!).render( <strictmode> <reacttogether sessionparams="{{" appid: import.meta.env apikey:> <app></app> </reacttogether> </strictmode>, )
コードは少し長くなりますが、原理は簡単です。各入力フィールドを編集しているユーザーを追跡し、必要なビジュアライゼーションをレンダリングするだけです。
これと同じアプローチが、ドロップダウンやスライダー バーなどの他の入力タイプにも機能します!!
--
それで終わりです!この完全に協力的な投資収益率シミュレーターを使用すると、友人が Zoom 上で投資収益率がどのように機能するかを息子に説明するのが簡単になります。ミッション達成! ✨
この種の共同 Web サイトを簡単に作成できるのを見ると、オンラインのときにインターネットがどのようにして私たちの距離を近づけるのだろうかと不思議に思います...詳しくは後ほど!
何か新しいことを学んでいただければ幸いです。フィードバックやご質問がございましたら、お気軽にお問い合わせください。
コーディングを楽しんでください! ?
- ?ライブデモ
- ??ソースコード
- ?一緒に反応するドキュメント
以上が数分でリアルタイム コラボレーションを React アプリに追加の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptコアデータ型は、ブラウザとnode.jsで一貫していますが、余分なタイプとは異なる方法で処理されます。 1)グローバルオブジェクトはブラウザのウィンドウであり、node.jsのグローバルです2)バイナリデータの処理に使用されるNode.jsの一意のバッファオブジェクト。 3)パフォーマンスと時間の処理にも違いがあり、環境に従ってコードを調整する必要があります。

javascriptusestwotypesofcomments:シングルライン(//)およびマルチライン(//)

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

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

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。
