用于 客户端 SDK 的Solid JS 绑定。 包括钩子、组件和 实用程序,以便在 Telegram Mini Apps 平台上轻松使用 Solid JS。/ U9 u! O7 A! G _9 p) K: n
) ]) ^3 V, N3 O& N( N' M$ h2 W$ y5 k/ D( X' ]& O/ |
# w: o: |# K" p' t" n* e; g3 G
安装在此之前,我们假定您已经安装了 solid-js 软件包,因为 是该软件包的同级依赖关系。 pnpm : - pnpm i @telegram-apps/sdk-solid
复制代码npm : - npm i @telegram-apps/sdk-solid
复制代码yarn : - yarn add @telegram-apps/sdk-solid
复制代码 SDKProviderSDKProvider 是负责提供 SDK 功能的组件。 它接受 acceptCustomStyles: boolean 和 debug: boolean 等属性。 两者都是可选的。 acceptCustomStyles 属性负责接受来自 Telegram 网页版的自定义样式。 debug 属性负责启用调试模式。 - import { SDKProvider } from '@telegram-apps/sdk-solid';7 q. t( R# b5 v( n
( Z# I7 y; U: A- /**
0 ~' ~. u. d2 J; ^+ o - * Root component for the whole project.7 k) X, Z" ]$ N! K
- */
! @7 Y; Z, W* v' W) u+ O/ q - export function Root() {
8 t# a: l# {7 J/ ^1 ~. v. d - return (& f g7 V7 A& H
- <SDKProvider acceptCustomStyles debug>% ]# i1 L4 w9 D, L
- <div>My application!</div>
9 M8 @0 B/ i Y3 o2 r - </SDKProvider>
; @, @- \5 c/ o4 G& [2 u - );
9 ^' O$ t1 }4 E' L, G& ]0 U% h - }
复制代码 Hooks该软件包中的每个组件钩子都会返回一个自定义信号。 返回的信号包含一个 属性 error?: unknown,如果在组件 初始化过程中出现问题,该属性将被设置。 调用包含该属性的信号将导致产生相应的 错误。 如果没有错误发生,信号将返回一个组件实例。 为了更好地理解,每个组件钩子都使用各自与组件相关的 init 函数。 如果 init 函数返回的是非承诺值,钩子将立即检索该值。 如果 init 函数 是异步的,那么当组件 仍在初始化时,钩子将返回一个带有 undefined 值的信号。 然后,它将更新为初始化值。 下面就是一个例子: - import { useBackButton, useViewport } from '@telegram-apps/sdk-solid';
g% h6 [: x/ k) W
; a% u3 e% }* j. }- // BackButton initializes synchronously. So, bb will be a signal
4 v+ u1 ^' ?7 f, P/ }) p6 }% L2 T - // returning an instance of BackButton.
$ Z4 x$ n6 [1 ?' \) y$ Y6 A - const bb = useBackButton();
6 B( _* X) p" a' R* N2 q- s+ P W9 @ - const bbV = bb(); // will be BackButton
9 A" h6 ?2 }: ]9 l+ g* J - 3 r2 Z2 l+ D( |- N' M
- // Viewport is being initialized asynchronously, so signal may return undefined.) C1 F" i8 M5 Z8 ~! |6 N6 e
- // After some time it will receive a valid value.& _8 A. G* u, z7 |/ l$ w& y
- const vp = useViewport();
1 i5 b* U; `& u$ W) O3 r - const vpV = vp(); // will be undefined
, i; F1 R/ d) U
/ M: y' n! e, t, ]0 t! L- // ...after some time
1 W4 s* b8 H3 M1 q% C: v+ Q8 P - const vpV2 = vp(); // will be Viewport
复制代码需要注意的是,所有成分的属性都是反应性的。 因此,如果钩子信号返回的值发生变化 ,信号本身不会收到通知。 这是因为 组件本身没有变化,但其属性发生了变化。 让我们来看看这个例子: - import { useViewport } from '@telegram-apps/sdk-solid';
2 |- ?& g" l, D9 W# R - import { createEffect } from 'solid-js';
0 r0 f' ~7 m3 {7 b: h" [ - z" ^5 b) U; `0 M& _! |# | _
- // Let's assume that viewport is already initialized.% p: |. c4 G _/ e: d
- const vp = useViewport();% E/ v) c6 m2 G( M
. U2 x& j c% i- createEffect(() => {
" J: h6 s+ N7 x L8 A j - // This line of code will not be called if the viewport height
; N( A4 U; _1 d - // or expansion state changes.
% s; t% a' V" S7 x% B8 `% d - console.log('Viewport changed', vp());: o; k' \% l: \+ `8 ~6 C& \; f5 V6 G
- });
% z& |# m4 H( J3 ?) s& C - 1 L3 D7 y1 z9 t# k* i/ l2 W2 v
- createEffect(() => {
1 P1 N$ _* R) U5 k2 W: L6 C - // But this line of code will be called every time the viewport
; C$ r1 X1 I( V/ @ d P - // height changes.
" ]$ W8 V( Q& y! G4 j# g - console.log('Viewport height changed', vp().height);
& x& r; P6 [( ~% B - });
复制代码我们拥有这种细粒度的反应能力,以提供最佳性能,就像 Solid 本身一样。 " W: A9 u. u7 o. {
HOCs所有软件包的高阶组件都使用了前面所述的钩子。 使用方法相当 简单: - import { withBackButton } from '@telegram-apps/sdk-solid';4 { m# m3 s" w+ W2 y+ T. i, R6 }
- " J) }( G. S* o2 ~& P3 y# p
- const MyComponent = withBackButton('bb', (props) => {
! R; X( H5 z* ^3 h - createEffect(() => {
4 W* `" R8 M1 C. f - props.bb().show();3 W3 |6 U! ^; w& D, ^8 N' X2 n
- });+ e7 U" V: V9 H
- return null;. B2 D, Z2 s' V" O1 O/ x
- });
复制代码 作为第一个参数,您必须传递一个负责接收 钩子结果的组件属性名称的值。 请注意,接收到的值将是一个信号,而不是后面的值。
) q( e- s0 {9 u# ZHooks 和 HOCs 列表[td]模板我们已经为 Solid JS 创建了一个使用当前软件包的 模板,您可以使用它。 |