目次
プロジェクトの要件
開発環境のセットアップ
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)

Vue 3 Vue 3 Apr 02, 2025 pm 06:32 PM

それは&#039; Vueチームにそれを成し遂げてくれておめでとうございます。それは大規模な努力であり、長い時間がかかったことを知っています。すべての新しいドキュメントも同様です。

Redwood.jsと動物相を使用してイーサリアムアプリを構築します Redwood.jsと動物相を使用してイーサリアムアプリを構築します Mar 28, 2025 am 09:18 AM

最近のビットコインの価格が20k $ $ USDを超えており、最近30Kを破ったので、イーサリアムを作成するために深く掘り下げる価値があると思いました

ブラウザから有効なCSSプロパティ値を取得できますか? ブラウザから有効なCSSプロパティ値を取得できますか? Apr 02, 2025 pm 06:17 PM

私はこの非常に正当な質問で誰かに書いてもらいました。 Leaは、ブラウザから有効なCSSプロパティ自体を取得する方法についてブログを書いています。それはこのようなものです。

粘着性のあるポジショニングとサスのダッシュを備えた積み重ねられたカード 粘着性のあるポジショニングとサスのダッシュを備えた積み重ねられたカード Apr 03, 2025 am 10:30 AM

先日、Corey Ginnivanのウェブサイトから、この特に素敵なビットを見つけました。そこでは、スクロール中にカードのコレクションが互いに積み重ねられていました。

CI/CDで少し CI/CDで少し Apr 02, 2025 pm 06:21 PM

「ウェブサイト」は「モバイルアプリ」よりも適していると言いますが、Max Lynchからのこのフレーミングが好きです。

WordPressブロックエディターでのマークダウンとローカリゼーションを使用します WordPressブロックエディターでのマークダウンとローカリゼーションを使用します Apr 02, 2025 am 04:27 AM

WordPressエディターでユーザーに直接ドキュメントを表示する必要がある場合、それを行うための最良の方法は何ですか?

レスポンシブデザインのブラウザを比較します レスポンシブデザインのブラウザを比較します Apr 02, 2025 pm 06:25 PM

これらのデスクトップアプリがいくつかあり、目標があなたのサイトをさまざまな次元ですべて同時に表示しています。たとえば、書くことができます

フレックスレイアウト内の紫色のスラッシュ領域が誤って「オーバーフロー空間」と見なされるのはなぜですか? フレックスレイアウト内の紫色のスラッシュ領域が誤って「オーバーフロー空間」と見なされるのはなぜですか? Apr 05, 2025 pm 05:51 PM

フレックスレイアウトの紫色のスラッシュ領域に関する質問フレックスレイアウトを使用すると、開発者ツールなどの混乱する現象に遭遇する可能性があります(D ...

See all articles