English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french

简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE คนไทย Français русский

回答

收藏

Telegram 小程序 | TypeScript @telegram-apps/sdk-solid @1.x

开源社区 开源社区 11212 人阅读 | 0 人回复 | 2025-02-25

用于 客户端 SDK 的Solid JS 绑定。 包括钩子、组件和 实用程序,以便在 Telegram Mini Apps 平台上轻松使用 Solid JS。
3 `$ l0 T( _* ]$ c% o& J, ^
+ q  ~# |+ h, E) S* k) ]& v. t
. H; ^: q# j% x' m7 a
  |7 t" ~$ \& L- R
安装

在此之前,我们假定您已经安装了 solid-js 软件包,因为 是该软件包的同级依赖关系。

pnpm :

  1. pnpm i @telegram-apps/sdk-solid
复制代码

npm :

  1. npm i @telegram-apps/sdk-solid
复制代码

yarn :

  1. yarn add @telegram-apps/sdk-solid
复制代码
SDKProvider

SDKProvider 是负责提供 SDK 功能的组件。 它接受 acceptCustomStyles: boolean 和 debug: boolean 等属性。 两者都是可选的。

acceptCustomStyles 属性负责接受来自 Telegram 网页版的自定义样式。

debug 属性负责启用调试模式。

  1. import { SDKProvider } from '@telegram-apps/sdk-solid';% N4 ~: E% G: _* H+ a

  2. - j  D0 s: m1 M, {5 ~" r. l
  3. /**( M0 F1 s/ n" |
  4. * Root component for the whole project.6 Z6 I6 F" ^3 h& |4 H  A& _
  5. */
    8 ?7 X0 ~# U, I
  6. export function Root() {$ F7 d2 T: w1 v9 B6 M" H2 g
  7.   return (
    + B& U% n, L# R$ K5 w1 {* V( L' y
  8.     <SDKProvider acceptCustomStyles debug>+ C; C0 r$ a5 A* R
  9.       <div>My application!</div>
    ' @' ~: ?4 [- q  E$ \+ K
  10.     </SDKProvider>+ U: ^1 T, ~) a
  11.   );9 B8 w/ T% d9 R% ~% h. x1 T& c
  12. }
复制代码
Hooks

该软件包中的每个组件钩子都会返回一个自定义信号。 返回的信号包含一个 属性 error?: unknown,如果在组件 初始化过程中出现问题,该属性将被设置。 调用包含该属性的信号将导致产生相应的 错误。 如果没有错误发生,信号将返回一个组件实例。

为了更好地理解,每个组件钩子都使用各自与组件相关的 init 函数。 如果 init 函数返回的是非承诺值,钩子将立即检索该值。 如果 init 函数 是异步的,那么当组件 仍在初始化时,钩子将返回一个带有 undefined 值的信号。 然后,它将更新为初始化值。

下面就是一个例子:

  1. import { useBackButton, useViewport } from '@telegram-apps/sdk-solid';8 ?: l: M3 B) `2 b3 z9 ^3 _) M8 \
  2. ; N0 E, T6 t9 o, L% d
  3. // BackButton initializes synchronously. So, bb will be a signal# O9 q3 Z  R% V0 U. p8 @
  4. // returning an instance of BackButton.6 i  d; }" U: x
  5. const bb = useBackButton();
    4 x% g* D- D. ?" {2 x" G
  6. const bbV = bb(); // will be BackButton
    : V0 `& b0 t& [* m- w; R- L

  7. * V- @$ `8 O1 i& P0 \  U4 n
  8. // Viewport is being initialized asynchronously, so signal may return undefined.8 X- I  ?3 Q/ e0 k3 ?# f. p, _
  9. // After some time it will receive a valid value.
    : X. e: e7 T6 A
  10. const vp = useViewport();
    5 o' ~# e  m; x3 V. C
  11. const vpV = vp(); // will be undefined
    6 ^- m5 w$ s7 M1 e  x( w3 Y
  12. & n  W( H( S3 _- V9 L' T0 g
  13. // ...after some time
    % e7 v: z! `- r9 V
  14. const vpV2 = vp(); // will be Viewport
复制代码

需要注意的是,所有成分的属性都是反应性的。 因此,如果钩子信号返回的值发生变化 ,信号本身不会收到通知。 这是因为 组件本身没有变化,但其属性发生了变化。

让我们来看看这个例子:

  1. import { useViewport } from '@telegram-apps/sdk-solid';" {, D2 I  z- y: e
  2. import { createEffect } from 'solid-js';- Q  U* r1 F* ?+ z( Z
  3.   ?. O6 q# F, c% V* Z
  4. // Let's assume that viewport is already initialized.
    - \# u+ S$ U* |8 r) r) K
  5. const vp = useViewport();! ~5 i0 f2 ^" x" \- \6 P; S1 n7 _8 L
  6. ! B4 D$ V0 u! o8 d1 d, F
  7. createEffect(() => {
    ' e0 K$ n. n9 k' `' t9 C+ I  D
  8.   // This line of code will not be called if the viewport height 2 m1 H4 B0 K6 W: h# v
  9.   // or expansion state changes.
    : p+ T7 d! n" h; H+ u; R
  10.   console.log('Viewport changed', vp());9 j; u& D" a% R
  11. });( o& F, R3 U* p- N" `
  12. 8 Q; f3 ?& ^& s( l- z4 G
  13. createEffect(() => {8 w! k' p- _: l/ {+ P- u: f4 t
  14.   // But this line of code will be called every time the viewport2 q' A9 G1 i$ ^
  15.   // height changes.
    : V/ s$ ~. _6 u" i
  16.   console.log('Viewport height changed', vp().height);8 Y! L8 l7 c  X" k
  17. });
复制代码

我们拥有这种细粒度的反应能力,以提供最佳性能,就像 Solid 本身一样。

! Z2 ?% @/ C9 y( j* N
HOCs

所有软件包的高阶组件都使用了前面所述的钩子。 使用方法相当 简单:

  1. import { withBackButton } from '@telegram-apps/sdk-solid';2 d" C4 U. m) L
  2. / H- q. k: D; c5 g4 h+ ^3 D
  3. const MyComponent = withBackButton('bb', (props) => {
    ( V  K9 X, }1 Q& k4 L% Y7 I  n
  4.   createEffect(() => {' Z; I+ {8 h5 _
  5.     props.bb().show();  n$ n7 {7 w8 w+ {( ~3 w& O
  6.   });
    ; n1 N& T1 h$ ^
  7.   return null;
    - }2 j" Y1 n' H  U
  8. });
复制代码
作为第一个参数,您必须传递一个负责接收 钩子结果的组件属性名称的值。 请注意,接收到的值将是一个信号,而不是后面的值。
1 F( A+ P0 f/ a4 A9 u0 _Hooks 和 HOCs 列表[td]
Hook
HOC
Signal value
useBackButtonwithBackButtonBackButton
useBiometryManagerwithBiometryManagerBiometryManager 或 undefined
useClosingBehaviorwithClosingBehaviorClosingBehavior
useCloudStoragewithCloudStorageCloudStorage
useHapticFeedbackwithHapticFeedbackHapticFeedback
useInitDatawithInitDataInitData
useInvoicewithInvoiceInvoice
useMainButtonwithMainButtonMainButton
useMiniAppwithMiniAppMiniApp
usePopupwithPopupPopup
useQRScannerwithQRScannerQRScanner
useSettingsButtonwithSettingsButtonSettingsButton
useSwipeBehaviorwithSwipeBehaviorSwipeBehavior
useThemeParamswithThemeParamsThemeParams
useUtilswithUtilsUtils
useViewportwithViewportViewport 或 undefined
模板

我们已经为 Solid JS 创建了一个使用当前软件包的 模板,您可以使用它。

分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则