目次
プロジェクトの要件
開発環境のセットアップ
useStateフック
useSocketフック
useImmerフック
最終的なタッチと完全なコード
ホームページ ウェブフロントエンド CSSチュートリアル 100行のコードでReactフックを使用してチャットアプリを構築する

100行のコードでReactフックを使用してチャットアプリを構築する

Apr 19, 2025 am 10:16 AM

100行のコードでReactフックを使用してチャットアプリを構築する

このチュートリアルは、驚くほど簡潔なコードで機能的なチャットアプリケーションを構築することにより、Reactフックの力を示しています。以前の記事では、Reactフックが導入され、関数を使用してコンポーネントを作成する能力を紹介しています。このチュートリアルは、フックが開発を簡素化し、ボイラープレートを削減する方法を示して、さらにそれを取り上げます。

いくつかのオープンソースオプションを含むいくつかのReactフックを活用して、プロセスを合理化し、機能を効率的に構築します。これらの事前に構築されたフックは、確立された標準に準拠しており、コードセキュリティと保守性を高めます。

プロジェクトの要件

チャットアプリケーションには次のものが含まれます。

  • サーバーからの過去のメッセージの取得。
  • グループチャットルームの機能。
  • ユーザー接続と切断のリアルタイム更新。
  • メッセージの送信と受信。

仮定:

  • サーバーはブラックボックスとして扱われ、単純なソケットを介して通信します。
  • スタイリングは、単一のCSSファイル(リンクリポジトリで使用可能)で処理されます。

開発環境のセットアップ

このプロジェクトには、node.jsとnpm(ノードパッケージマネージャー)が必要です。必要に応じてそれらをインストールしてください。次に、Create Reactアプリを使用してReactプロジェクトを作成します。

 NPX CREATE-REACT-APPソケットクライアント
CDソケットクライアント
NPM開始
ログイン後にコピー

http://localhost:3000に移動して、デフォルトのウェルカムページを表示します。使用されるフックの周りにチュートリアルを構成します。

useStateフック

useStateフックはコンポーネント状態を管理します。クラスコンポーネントでthis.state使用する代わりに、 useStateを使用して、ユーザー名のように永続的なデータを保存します。 useState変数の更新は、コンポーネントを自動的に再レン​​ダリングします。

フックをインポートします:

 「React」からReact、{UseState}をインポートします。
ログイン後にコピー

単純なコンポーネントは、 id変数に基づいて、ログインした場合、ログインした場合、またはログインフォームを表示します。

 // app.js
「React」からReact、{UseState}をインポートします。
Import './index.css';

Export Default()=> {
  const [id、setid] = uesestate( "");
  const [nameinput、setnameInput] = uesestate( "");
  const [room、setroom] = uesestate( "");

  const handleSubmit = e => {
    E.PreventDefault();
    if(!nameInput){
      return alert( "name can couns ve vey");
    }
    setid(nameinput); //修正:名前の代わりにnameinputを使用します
    socket.emit( "join"、nameinput、room); //修正:名前の代わりにnameinputを使用します
  };

  // ...(コンポーネントの残り)
};
ログイン後にコピー

これは、ログインステータスを管理するためのuseState示しています。

useSocketフック

Open-Source useSocket Hookは、socket.ioライブラリを使用してサーバー接続を管理します。これは、標準のsocket.ioクライアントのグローバル宣言と比較して、WebSocket接続に対するより管理しやすいアプローチを提供します。

フックをインストールします:

 npm use-socket.io-clientを追加します
ログイン後にコピー

基本的な使用法:

 const [socket] = useSocket( 'socket-url');
ログイン後にコピー

インポートと初期化:

 「use-socket.io-client」からuseSocketをインポートします。
const [socket] = useSocket( '<your-socket-url> ');
socket.connect();
console.log(socket);</your-socket-url>
ログイン後にコピー

接続のブラウザコンソールを確認してください。

useImmerフック

useImmerフックは、アレイとオブジェクトの不変の状態管理を簡素化します。元の状態の直接的な突然変異を防ぎます。これは、オンラインユーザーとメッセージのリストを管理するために重要です。

フックをインストールします:

 npm use-immerを追加します
ログイン後にコピー

基本的な使用法:

 const [data、setData] = useimmer(defaultValue);
ログイン後にコピー

setData 、安全な操作のためのドラフトコピーを作成し、元の状態がそのままであることを保証します。

 setdata(draft => {
  drawt.push(newItem);
});
ログイン後にコピー

EffectフックuseEffect

組み込みのuseEffectフックは、レンダリング後にコードを実行します。ソケットリスナーを処理し、冗長なメッセージディスプレイを避けるために使用します。

輸入:

 Reactをインポート、{useState、useefcect} from 'React';
ログイン後にコピー

Messagesコンポーネントはメッセージと更新をレンダリングします。

 const messages = props => propss.data.map(m =>(
  m [0]!== ''?<div> {m [0]}:{m [1]}</div> :<div classname="innermsg"> {m [1]}</div>
));
ログイン後にコピー

useEffect内のソケットロジックは、繰り返しメッセージレンダリングを防ぎます。

 effect(()=> {
  socket.on( 'update'、message => setMessages(draft => {
    drawt.push([''、message]);
  }));
  // ...他のソケットリスナー
}、[]);
ログイン後にコピー

「参加」メッセージは、さらなるリスナーをトリガーします。

最終的なタッチと完全なコード

最終的なアプリには次のことが必要です。

  • オンラインユーザーを表示するOnlineコンポーネント。
  • オンラインユーザー向けのuseImmerフックとソケットリスナー。
  • メッセージ送信ハンドラー。

完全なApp.jsここに含めるには広すぎますが、完全なコードはGithubで利用できます(元の記事で提供されているリンク)。

このチュートリアルは、最小限のコードで複雑なアプリケーションを構築するためのReactフックの効率を示しています。この例は、機能的なチャットアプリケーションを紹介しますが、原則は幅広いプロジェクトに適用できます。

以上が100行のコードでReactフックを使用してチャットアプリを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

静的フォームプロバイダーの比較 静的フォームプロバイダーの比較 Apr 16, 2025 am 11:20 AM

ここでは、「静的フォームプロバイダー」という用語を埋めてみましょう。あなたはあなたのHTMLを持ってきます

SASSをより速くするための概念の証明 SASSをより速くするための概念の証明 Apr 16, 2025 am 10:38 AM

新しいプロジェクトの開始時に、SASSコンピレーションは瞬く間に起こります。これは、特にbrowsersyncとペアになっている場合は素晴らしい気分です。

毎週のプラットフォームニュース:HTMLロード属性、主なARIA仕様、およびIFRAMEからShadowDOMへの移動 毎週のプラットフォームニュース:HTMLロード属性、主なARIA仕様、およびIFRAMEからShadowDOMへの移動 Apr 17, 2025 am 10:55 AM

今週のプラットフォームニュースのラウンドアップで、Chromeは、Web開発者のロード、アクセシビリティ仕様、およびBBCの動きのための新しい属性を導入します

HTMLダイアログ要素を使用したいくつかの実践 HTMLダイアログ要素を使用したいくつかの実践 Apr 16, 2025 am 11:33 AM

これは私が初めてHTML要素を見ていることです。私はしばらくの間それを知っていましたが、まだスピンしていませんでした。かなりクールです

ペーパーフォーム ペーパーフォーム Apr 16, 2025 am 11:24 AM

購入またはビルドは、テクノロジーの古典的な議論です。自分で物を構築することは、あなたのクレジットカードの請求書にはラインアイテムがないため、安価に感じるかもしれませんが

「ポッドキャストにサブスクライブ」リンクはどこにすべきですか? 「ポッドキャストにサブスクライブ」リンクはどこにすべきですか? Apr 16, 2025 pm 12:04 PM

しばらくの間、iTunesはポッドキャストの大きな犬だったので、「ポッドキャストにサブスクライブ」をリンクした場合:

それはすべて頭の中にあります:Reactヘルメットを使用してReact Poweredサイトのドキュメントヘッドを管理する それはすべて頭の中にあります:Reactヘルメットを使用してReact Poweredサイトのドキュメントヘッドを管理する Apr 15, 2025 am 11:01 AM

ドキュメントヘッドはウェブサイトの中で最も魅力的な部分ではないかもしれませんが、それに入るものは間違いなくあなたのウェブサイトの成功にとってそれと同じくらい重要です

独自の非JavaScriptベースの分析をホストするためのオプション 独自の非JavaScriptベースの分析をホストするためのオプション Apr 15, 2025 am 11:09 AM

サイトの訪問者と使用データを追跡するのに役立つ分析プラットフォームがたくさんあります。おそらく、特にGoogleアナリティクスが広く使用されています

See all articles