useThunderPhone hook teljes körű irányítást biztosít a felhasználói felület felett, miközben a ThunderPhone kezeli a hangmunkamenetet, a hangirányítást és a kapcsolat állapotát. Akkor használja, ha teljesen egyedi felhasználói felületre van szüksége — saját gombokkal, elrendezésekkel, animációkkal és arculattal —, miközben a ThunderPhone a háttérben mindent kezel.
Mikor használja a Headless hookot
Az előre elkészítettThunderPhoneWidget komponens a legtöbb használati esetet lefedi, de használja a headless hookot, ha a következőkre van szüksége:
- Teljesen egyedi hívási felületre, amely illeszkedik az alkalmazása tervezési rendszeréhez
- Valós idejű hangszintek által vezérelt, hangra reagáló vizualizációkra (hullámformák, gömbök, pulzáló jelzők)
- Egyedi hívási folyamatokra, például hívás előtti űrlapokra, hívás utáni felmérésekre vagy a hang melletti beágyazott chatre
- Integrációra meglévő komponenskönyvtárba (Material UI, Chakra, Radix stb.)
Telepítés
A headless hook használatához nem kell importálnia az
@thunderphone/widget/style.css fájlt, mivel saját felhasználói felületet biztosít. Azonban továbbra is ugyanazt az @thunderphone/widget csomagot kell telepítenie.Alapszintű használat
Beállítások
Ezeket a beállításokat adja át auseThunderPhone hooknak a UseThunderPhoneOptions használatával:
A hook felület nélküli: nem fogadja el a
ThunderPhoneWidget megjelenési propjait (theme, primaryColor, title, position, className). Ezek átadása TypeScript-hibát okoz — a megjelenítést teljes egészében Ön alakítja ki.Visszatérési érték
A hook egyUseThunderPhoneReturn objektumot ad vissza:
Hangra reagáló felhasználói felület
AzaudioLevelRef ref képkockasebességű hangszinteket biztosít React-újrarenderelés kiváltása nélkül, ezért ideális sima hullámforma-vizualizációk, pulzáló gömbök vagy bármely, a beszélgetéshez kötött animáció vezérlésére. A szint azt tükrözi, amelyik hangosabb: az ügynök hangja vagy a látogató mikrofonja.
Hullámforma-példa
Pulzáló gömb példa
Beszédjelző példa
A hangerővel változó, React által renderelt felhasználói felületekhez — például egy küszöbérték-alapú „beszél” jelvényhez — adott időközönként olvassa ki azaudioLevelRef.current értékét, és tárolja az eredményt állapotban:
Állapotgép
Astate tulajdonság az alábbi életciklust követi:
Példák
Némításvezérléssel
Csengőhanggal
Játsszon le csengőhangot a csatlakozás során telefonhívás szimulálásához:connecting állapot alatt ismétlődik, és elhalkul, amikor az ügynök csatlakozik. A beépített alapértelmezett csengőhanghoz adjon át true értéket, saját hangfájl használatához pedig URL-karakterláncot.
Esemény-visszahívásokkal
Teljesen egyedi felület
Tippek
A phone.audio mindig legyen renderelve
A phone.audio mindig legyen renderelve
A
phone.audio elem láthatatlan, de kötelező. Helyezze el bárhol a JSX-ben — nem renderel látható DOM-ot, de belsőleg kezeli a WebRTC-hangkapcsolatot.Kapcsolódás közben tiltsa le a gombot
Kapcsolódás közben tiltsa le a gombot
A
connecting állapot 1–3 másodpercig tarthat. Ebben az állapotban tiltsa le a hívásgombot, hogy megelőzze az ismétlődő kapcsolódási kísérleteket.Kezelje elegánsan a hibaállapotot
Kezelje elegánsan a hibaállapotot
Ha az állapot
error, jelenítse meg a felhasználónak a phone.error értékét, és hagyja engedélyezve a hívásgombot. A hook nem lép ki magától az error állapotból — a connect() újbóli meghívása új kísérletet indít, és törli az előző hibát.Használjon visszahívásokat a mellékhatásokhoz
Használjon visszahívásokat a mellékhatásokhoz
Az
onConnect, onDisconnect és onError visszahívások ideálisak elemzésekhez, naplózáshoz vagy más alkalmazáslogika aktiválásához az állapot lekérdezése nélkül.Olvassa az audio szinteket az audioLevelRef értékéből
Olvassa az audio szinteket az audioLevelRef értékéből
Az
audioLevelRef az egyetlen élő hangszintforrás. A hullámformákhoz hasonló folyamatos animációkhoz olvassa az audioLevelRef.current értékét a requestAnimationFrame használatával (egy ref olvasása nem okoz újrarenderelést), vagy mintavételezze időközönként, és tárolja az eredményt állapotban a React által renderelt felhasználói felülethez. Az audioLevel szám elavult, és mindig 0 — ne építsen rá logikát.