客户端 SDK 的 React JS 绑定。 包括钩子、组件和 实用程序,以便在 Telegram 迷你应用程序平台上轻松使用 React JS。安装 在此之前,假定您已经安装了 react 软件包,因为 是该软件包的同级依赖关系。 pnpm : - pnpm i @telegram-apps/sdk-react
复制代码npm : - npm i @telegram-apps/sdk-react
复制代码yarn : - yarn add @telegram-apps/sdk-react
复制代码 SDKProviderSDKProvider 是负责提供 SDK 功能的组件。 它接受 ,如 acceptCustomStyles: boolean 和 debug: boolean 等属性。 两者都是可选的。 acceptCustomStyles 属性负责接受来自 Telegram 网页版的自定义样式。 debug 属性负责启用调试模式。 - import { SDKProvider } from '@telegram-apps/sdk-react';
4 k' U2 B- w6 l
1 e* f3 A/ ?8 r7 X; f5 X2 q- /**
1 o4 `4 b. v% ~) N4 v7 K: C1 ? - * Root component for the whole project.
/ ~9 b1 C% ^! }$ Y - */
# a6 R; i: A3 o - export function Root() {" P! X; O: {" g* `
- return (
% k, P) Q( V& O$ ] - <SDKProvider acceptCustomStyles debug>
; G; H8 ?8 Z2 S6 \ - <div>My application!</div>
6 j$ y* ]# {, R: q - </SDKProvider>
$ `) {' e( B, E# |! l5 y2 ]% h - );' R1 x! j% l8 c/ j' u1 e; G
- }
复制代码 Hooks为了更好地理解,每个组件钩子都使用各自与组件相关的 init 函数。 如果 init 函数返回的是非承诺值,钩子将立即检索该值。 如果 init 函数 是异步的,那么当组件仍在 初始化时,钩子将返回一个 undefined 值。 然后,它将更新为初始化值。 本软件包中的所有组件钩子分为两部分: - 读取实际的初始函数值。 这些钩子是非后缀的,如 useBackButton。
- 检索与初始函数值相关的元项目。 这些钩子包括一个后缀,如 ,如 Raw,如 useBackButtonRaw。
3 C/ T1 ]$ b) q& b5 ?+ R
第一类钩子返回实际的初始函数值。 如果 在组件初始化过程中出现问题,它们就会出错。 第二类钩子会返回一个包含初始化进程信息的对象。 下面是物体的形状: - export interface SDKContextItem<T> {" _% i3 P8 Y, ]
- /**4 k4 g5 {3 `* Z
- * This item execution result. The property may be missing
: I4 s# \3 }, R% o4 a - * in case the execution is async.# v8 b' \( l3 Q i; k! h
- */5 B9 ^, \ M7 O# e; ^7 ?( O
- result?: T;
8 J9 [9 F/ W( |, E& K# | - /**& t* h( u6 w% R; ^; Z; ]
- * Function to clean up item side effects.9 i! n0 o' i8 X1 [' Q
- */
+ p* y# i8 H$ d4 m1 {# o - cleanup?(): void;$ N3 F! Y2 t5 ~8 |& T
- /**
8 D4 {$ _- T- [" J, y! E$ _ - * An error occurred during execution.
) G% Y4 J# G3 Q! ~% n: P( U - */) ^/ `0 {4 E4 n# I- M6 V% h5 g
- error?: unknown;& B* V R* J: ]) ?
- }
复制代码使用第二类钩子,可以提取错误而不抛出错误。 下面是完整的使用示例: - import {6 K2 U1 b5 X3 M" F. i- E Q8 r) ~! \
- useBackButton,5 l% W+ R9 h& U
- useBackButtonRaw,
5 H$ L0 z$ Y# d* h - useViewport," m6 ]& u' K4 Z8 ]: F3 z2 {1 P
- useViewportRaw,
4 i* R6 B$ ]5 F+ t) T9 D& I' { - useBiometryManagerRaw,& Y$ N0 J8 h* h e9 k
- } from '@telegram-apps/sdk-react';$ I9 C, V% a/ s
- import { useEffect } from 'react';
4 M/ ~! B1 h: W( K% ^5 f! b - & H9 l! E; e3 z6 U, h
- // BackButton initializes synchronously. So, bb will be
, A% x5 h* a' t }' R) @ - // the BackButton instance.; w9 g5 [7 C( \. j, m+ o1 V
- const bb = useBackButton();
4 c3 w- e. [% e6 d5 y* w1 Q - 3 p2 E+ `' X- k( {4 y
- // Viewport is being initialized asynchronously, so signal may return undefined.
& A: j6 Q9 v4 j* V1 `7 U! V - // After some time it will receive a valid value.
! [; s( }4 ^$ a! @4 z - const vp = useViewport();
$ U6 x1 U0 ?8 |' V9 c
7 Z1 V/ n( i# F1 }! {- useEffect(() => {
$ A7 z5 r7 ^7 B; I - console.log(vp); // will be undefined and then Viewport instance.) h j% S9 n [+ t8 i+ [$ W w
- }, [vp]);' i4 |& E, P! H) `. s- b! P' L% k
- : r/ K. d( P5 n0 \2 R% e' N
- const bm = useBiometryManagerRaw();% D0 F2 ~# t5 @2 f$ J
, Z8 x$ T, y) n$ B3 _6 c: L- useEffect(() => {
2 O. y# n/ s! O$ ?0 o - if (bm.error) {
# A6 J3 `: [# t Z" j - console.error('Something went wrong for BiometryManager', bm.error);
# E8 b+ T9 v# B2 @ - }) d" b4 ], Y3 ~' \8 B9 M% y" E( G7 ~
- }, [bm]);
复制代码 SSR该软件包还支持在 Next.js 等流行框架中广泛使用的 SSR 模式。 在服务器端使用 软件包钩子时,必须将 true 作为第一个参数传递。 这将通知钩子 服务器端模式已启用。 如果不指定此值,在服务器端 上调用钩子将导致错误。 服务器端模式会为服务器端的每个组件钩子返回 undefined,也会在挂载当前组件之前返回 undefined。这对于服务器端和客户端渲染的树之间的持久性是必需的。 - import { useBackButton } from '@telegram-apps/sdk-react';+ a# P; b/ J$ L, a- I9 G" I
- import { useEffect } from 'react';5 z# |/ M2 i3 D7 H8 b# h3 u
9 R8 ]8 H/ D9 Z9 b& D9 m- function Component() {
2 q D' d9 O8 c$ M - const bb = useBackButton(true); // will be undefined or BackButton.3 B o0 m$ U# ]
; w7 z4 i( k0 b: R4 C- X1 P; g- useEffect(() => {# Q* Y. a5 q1 W0 y2 X
- if (bb) {( i: e# A" F! H& |# p3 o
- // Here we can safely work with the BackButton.$ z0 W- W6 G+ `7 X( T x
- }
2 b3 B* ~3 z+ m0 q' u: V1 g% ` - }, [bb]);
) b9 F9 C0 m! ^" K' x- o - }
复制代码 HOCs所有软件包的高阶组件都使用前面描述的钩子。 使用方法相当 简单: - import { withBackButton } from '@telegram-apps/sdk-react';
7 e, f _$ W4 S; k0 m - import { useEffect } from 'react';
8 L9 ?7 K3 p) G2 U - : G3 x$ g/ j: K2 x4 ]# y
- const A = withBackButton('bb', false, ({ bb }) => {
; X$ `( V2 u5 ~, E) h$ l" y) Z$ \ - useEffect(() => {' D3 x S& V. f- F
- bb.show();2 x5 F$ g7 o7 I$ t2 s4 t
- }, [bb]);9 G! h F/ Q( e7 Q1 s, h
- return null;
. b8 C- X6 C: O2 f - });
5 U: i; |$ Y+ H- z, s( c% x2 _
9 e$ J1 H' `+ {' g! B- const B = withBackButton('bb', true, ({ bb }) => {8 I: U. t. I/ a( g5 a4 v W
- useEffect(() => {, j+ i" d, K% o U b5 v
- bb && bb.show();
* T) I$ a, b8 q( t. q- k - }, [bb]);, v( d$ }+ p% i$ s5 L/ T5 O, R9 m
- return null;
- E" B& O2 k- h0 Z, d; p9 k; h) Y, D4 u) a - });
复制代码 作为第一个参数,您必须传递一个值,该值负责接收 钩子结果的组件属性名称。 第二个参数是 SSR 标志模式,将传递给钩子,内部使用 。- B- c. |% H4 K
2 G3 I1 P% d7 r- N; ~$ D: }
Hooks 和 HOC 列表Hook and HOC (Raw) | Hook and HOC (Result) | Returned value | useBackButtonRaw, withBackButtonRaw | useBackButton, withBackButton | BackButton | useBiometryManagerRaw, withBiometryManagerRaw | useBiometryManager, withBiometryManager | BiometryManager 或 undefined | useClosingBehaviorRaw, withClosingBehaviorRaw | useClosingBehavior, withClosingBehavior | ClosingBehavior | useCloudStorageRaw, withCloudStorageRaw | useCloudStorage, withCloudStorage | CloudStorage | useHapticFeedbackRaw, withHapticFeedbackRaw | useHapticFeedback, withHapticFeedback | HapticFeedback | useInitDataRaw, withInitDataRaw | useInitData, withInitData | InitData | useInvoiceRaw, withInvoiceRaw | useInvoice, withInvoice | Invoice | | useLaunchParams | Launch params | useMainButtonRaw, withMainButtonRaw | useMainButton, withMainButton | MainButton | useMiniAppRaw, withMiniAppRaw | useMiniApp, withMiniApp | MiniApp | usePopupRaw, withPopupRaw | usePopup, withPopup | Popup | useQRScannerRaw, withQRScannerRaw | useQRScanner, withQRScanner | QRScanner | useSettingsButtonRaw, withSettingsButtonRaw | useSettingsButton, withSettingsButton | SettingsButton | useSwipeBehaviorRaw, withSwipeBehaviorRaw | useSwipeBehavior, withSwipeBehavior | SwipeBehavior | useThemeParamsRaw, withThemeParamsRaw | useThemeParams, withThemeParams | ThemeParams | useUtilsRaw, withUtilsRaw | useUtils, withUtils | Utils | useViewportRaw, withViewportRaw | useViewport, withViewport | Viewport 或 undefined |
/ K5 D' p- H T% _模板我们已经创建了一个用于 React JS 的 模板,它使用了当前软件包,因此您可以使用它。 9 k8 _8 o1 k! R/ w4 l& ~, [
; U! j% H! u* H) M0 e
|