在100行代碼中使用React Hook構建聊天應用程序
該教程通過以驚人的簡潔代碼構建功能性聊天應用程序來展示React Hooks的力量。先前的文章引入了React鉤子,展示了它們使用函數創建組件的能力。本教程將其進一步發展,說明瞭如何簡化開發並減少樣板。
我們將利用幾個React鉤子,包括一些開源選項,以簡化流程並有效地構建功能。這些預建的鉤子遵守已建立的標準,增強了代碼安全性和可維護性。
項目要求
我們的聊天應用程序將包括:
- 從服務器檢索過去的消息。
- 小組聊天室功能。
- 用戶連接和斷開連接的實時更新。
- 發送和接收消息。
假設:
- 該服務器被視為黑匣子,通過簡單的插座進行通信。
- 造型由單個CSS文件(可在鏈接的存儲庫中使用)來處理。
建立開發環境
該項目需要node.js和npm(節點軟件包管理器)。如有必要,安裝它們。然後,使用Create React App創建React項目:
NPX Create-React-App-client CD插座 - 客戶 NPM開始
導航到http://localhost:3000
以查看默認的歡迎頁面。我們將圍繞使用的鉤子構建教程。
useState
鉤子
useState
掛鉤管理組件狀態。我們沒有在類組件中使用this.state
,而是使用useState
來存儲持久數據,例如用戶名。更新對useState
變量會自動重新渲染組件。
導入鉤子:
導入React,{usestate}來自“ React”;
一個簡單的組件將根據id
變量登錄,否則將顯示“ Hello”或登錄表單:
// app.js 導入React,{usestate}來自“ React”; 導入'./index.css'; 導出默認值()=> { const [id,setId] = usestate(“”); const [nameInput,setNameInput] = usestate(“”); const [房間,setroom] = usestate(“”); const handlesubmit = e => { e.preventDefault(); 如果(!name -input){ 返回警報(“名稱不能為空”); } setID(nameInput); //更正:使用nameInput代替名稱 socket.emit(“ join”,nameInput,房間); //更正:使用nameInput代替名稱 }; // ...(該組件的其餘部分) };
這證明了管理登錄狀態的useState
。
useSocket
掛鉤
開源使用useSocket
Hook使用socket.io庫管理服務器連接。與標準socket.io客戶端的全局聲明相比,這為Websocket連接提供了更易於管理的方法。
安裝鉤子:
npm添加用socket.io-client
基本用法:
const [socket] = usesocket('socket-url');
導入和初始化:
從“ use-socket.io-client”中導入useSudeocket; const [socket] = useSudeocket('<your-socket-url> '); socket.connect(); console.log(套接字);</your-socket-url>
檢查瀏覽器控制台是否連接。
useImmer
鉤
useImmer
鉤簡化了數組和對象的不變狀態管理。它可以防止原始狀態的直接突變。這對於管理在線用戶和消息列表至關重要。
安裝鉤子:
npm添加用途
基本用法:
const [data,setData] = useimmer(DefaultValue);
setData
創建了一個草稿副本,以確保原始狀態保持完整。
setdata(draft => { draft.push(newitem); });
useEffect
鉤
渲染後,內置的useEffect
掛鉤執行代碼。我們將使用它來處理套接字偵聽器並避免顯示冗餘消息。
進口:
導入React,{usestate,usefeft}來自'react';
Messages
組件呈現消息和更新:
const messages = props => props.data.map(m =>(( m [0]! ==''?<div> {M [0]}:{M [1]}</div> :<div classname="innermsg"> {M [1]}</div> );
useEffect
中的插座邏輯可防止重複的消息渲染:
useeffect(()=> { socket.on('update',messages => setMessages(draft => { draft.push(['',messages]); })); // ...其他插座聽眾 },[]);
“加入”消息會觸發進一步的聽眾。
最終觸摸和完整的代碼
最終應用需要:
-
Online
組件以顯示在線用戶。 - 用於在線用戶的使用者
useImmer
和套接字偵聽器。 - 消息提交處理程序。
完整的App.js
太廣泛了,無法在此處包含,但是完整的代碼可在GitHub上獲得(原始文章中提供的鏈接)。
該教程展示了用最小代碼構建複雜應用的React鉤子的效率。該示例顯示了功能性聊天應用程序,但是這些原理可以應用於廣泛的項目。
以上是在100行代碼中使用React Hook構建聊天應用程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

不同瀏覽器對CSS解析存在差異,導致顯示效果不一致,主要包括默認樣式差異、盒模型計算方式、Flexbox和Grid佈局支持程度及某些CSS屬性行為不一致。 1.默認樣式處理不一致,解決方法是使用CSSReset或Normalize.css統一初始樣式;2.舊版IE的盒模型計算方式不同,建議統一使用box-sizing:border-box;3.Flexbox和Grid在邊緣情況或舊版本中表現有差異,應多測試並使用Autoprefixer;4.某些CSS屬性行為不一致,需查閱CanIuse並提供降級

accent-color是CSS中用於自定義復選框、單選按鈕和滑塊等表單元素高亮顏色的屬性;1.它直接改變表單控件選中狀態的默認顏色,如將復選框的藍色勾選標記改為紅色;2.支持的元素包括type="checkbox"、type="radio"和type="range"的輸入框;3.使用accent-color可避免複雜的自定義樣式和額外DOM結構,保持原生可訪問性;4.現代瀏覽器普遍支持,舊瀏覽器需降級處理;5.設置accent-col

1.ItAdjustSelementsLikeImagesRikeImagesOrformInputswithIntExtLineSustLineSlineSlineSlineSlikeLikeLikeBaseline,中間,Super,Super,Super和Sub.2.intablebecells,ItControlScontentalStalteNtalmscontentalMedwithThtop,Middle,Middle,Midder,Midder,經常

要改變CSS中文本顏色,需使用color屬性;1.使用color屬性可設置文本前景色,支持顏色名稱(如red)、十六進制碼(如#ff0000)、RGB值(如rgb(255,0,0))、HSL值(如hsl(0,100%,50%))以及帶透明度的RGBA或HSLA(如rgba(255,0,0,0.5));2.可將顏色應用於包含文本的任何元素,如h1至h6標題、段落p、鏈接a(需注意a:link、a:visited、a:hover、a:active不同狀態的顏色設置)、按鈕、div、span等;3.最

UseAutomatedToolSlikePurgecsSoruncsStoscanAndRemoveUnusedcss; 2. integratePuratePurgingIntoyourBuildProcessviawebpack,vite,vite,ortailwind ’scontentConfiguration; 3.AuditcsSusageWithChroMedEvtoolScoverAgeTabBeforgeForgingToavoidRemovingNeedEdedStyles; 4.safelistdynamic

首先通過JavaScript獲取用戶系統偏好和本地存儲的主題設置,初始化頁面主題;1.HTML結構包含一個按鈕用於觸發主題切換;2.CSS使用:root定義亮色主題變量,.dark-mode類定義暗色主題變量,並通過var()應用這些變量;3.JavaScript檢測prefers-color-scheme並讀取localStorage決定初始主題;4.點擊按鈕時切換html元素上的dark-mode類,並將當前狀態保存至localStorage;5.所有顏色變化均帶有0.3秒過渡動畫,提升用戶

backdrop-filter用於對元素背後的內容應用視覺效果,1.使用backdrop-filter:blur(10px)等語法實現毛玻璃效果;2.支持blur、brightness、contrast等多種濾鏡函數並可疊加;3.常用於玻璃態卡片設計,需確保元素與背景重疊;4.現代瀏覽器支持良好,可用@supports提供降級方案;5.避免過大模糊值和頻繁重繪以優化性能,該屬性僅在元素背後有內容時生效。

Theaspect-ratioCSSpropertydefinesthewidth-to-heightratioofanelement,ensuringconsistentproportionsinresponsivedesigns.1.Itisapplieddirectlytoelementslikeimages,videos,orcontainersusingsyntaxsuchasaspect-ratio:16/9.2.Commonusecasesincludemaintainingres
