用于 客户端 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 : - 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';% N4 ~: E% G: _* H+ a
- j D0 s: m1 M, {5 ~" r. l- /**( M0 F1 s/ n" |
- * Root component for the whole project.6 Z6 I6 F" ^3 h& |4 H A& _
- */
8 ?7 X0 ~# U, I - export function Root() {$ F7 d2 T: w1 v9 B6 M" H2 g
- return (
+ B& U% n, L# R$ K5 w1 {* V( L' y - <SDKProvider acceptCustomStyles debug>+ C; C0 r$ a5 A* R
- <div>My application!</div>
' @' ~: ?4 [- q E$ \+ K - </SDKProvider>+ U: ^1 T, ~) a
- );9 B8 w/ T% d9 R% ~% h. x1 T& c
- }
复制代码 Hooks该软件包中的每个组件钩子都会返回一个自定义信号。 返回的信号包含一个 属性 error?: unknown,如果在组件 初始化过程中出现问题,该属性将被设置。 调用包含该属性的信号将导致产生相应的 错误。 如果没有错误发生,信号将返回一个组件实例。 为了更好地理解,每个组件钩子都使用各自与组件相关的 init 函数。 如果 init 函数返回的是非承诺值,钩子将立即检索该值。 如果 init 函数 是异步的,那么当组件 仍在初始化时,钩子将返回一个带有 undefined 值的信号。 然后,它将更新为初始化值。 下面就是一个例子: - import { useBackButton, useViewport } from '@telegram-apps/sdk-solid';8 ?: l: M3 B) `2 b3 z9 ^3 _) M8 \
- ; N0 E, T6 t9 o, L% d
- // BackButton initializes synchronously. So, bb will be a signal# O9 q3 Z R% V0 U. p8 @
- // returning an instance of BackButton.6 i d; }" U: x
- const bb = useBackButton();
4 x% g* D- D. ?" {2 x" G - const bbV = bb(); // will be BackButton
: V0 `& b0 t& [* m- w; R- L
* V- @$ `8 O1 i& P0 \ U4 n- // Viewport is being initialized asynchronously, so signal may return undefined.8 X- I ?3 Q/ e0 k3 ?# f. p, _
- // After some time it will receive a valid value.
: X. e: e7 T6 A - const vp = useViewport();
5 o' ~# e m; x3 V. C - const vpV = vp(); // will be undefined
6 ^- m5 w$ s7 M1 e x( w3 Y - & n W( H( S3 _- V9 L' T0 g
- // ...after some time
% e7 v: z! `- r9 V - const vpV2 = vp(); // will be Viewport
复制代码需要注意的是,所有成分的属性都是反应性的。 因此,如果钩子信号返回的值发生变化 ,信号本身不会收到通知。 这是因为 组件本身没有变化,但其属性发生了变化。 让我们来看看这个例子: - import { useViewport } from '@telegram-apps/sdk-solid';" {, D2 I z- y: e
- import { createEffect } from 'solid-js';- Q U* r1 F* ?+ z( Z
- ?. O6 q# F, c% V* Z
- // Let's assume that viewport is already initialized.
- \# u+ S$ U* |8 r) r) K - const vp = useViewport();! ~5 i0 f2 ^" x" \- \6 P; S1 n7 _8 L
- ! B4 D$ V0 u! o8 d1 d, F
- createEffect(() => {
' e0 K$ n. n9 k' `' t9 C+ I D - // This line of code will not be called if the viewport height 2 m1 H4 B0 K6 W: h# v
- // or expansion state changes.
: p+ T7 d! n" h; H+ u; R - console.log('Viewport changed', vp());9 j; u& D" a% R
- });( o& F, R3 U* p- N" `
- 8 Q; f3 ?& ^& s( l- z4 G
- createEffect(() => {8 w! k' p- _: l/ {+ P- u: f4 t
- // But this line of code will be called every time the viewport2 q' A9 G1 i$ ^
- // height changes.
: V/ s$ ~. _6 u" i - console.log('Viewport height changed', vp().height);8 Y! L8 l7 c X" k
- });
复制代码我们拥有这种细粒度的反应能力,以提供最佳性能,就像 Solid 本身一样。 ! Z2 ?% @/ C9 y( j* N
HOCs所有软件包的高阶组件都使用了前面所述的钩子。 使用方法相当 简单: - import { withBackButton } from '@telegram-apps/sdk-solid';2 d" C4 U. m) L
- / H- q. k: D; c5 g4 h+ ^3 D
- const MyComponent = withBackButton('bb', (props) => {
( V K9 X, }1 Q& k4 L% Y7 I n - createEffect(() => {' Z; I+ {8 h5 _
- props.bb().show(); n$ n7 {7 w8 w+ {( ~3 w& O
- });
; n1 N& T1 h$ ^ - return null;
- }2 j" Y1 n' H U - });
复制代码 作为第一个参数,您必须传递一个负责接收 钩子结果的组件属性名称的值。 请注意,接收到的值将是一个信号,而不是后面的值。
1 F( A+ P0 f/ a4 A9 u0 _Hooks 和 HOCs 列表[td]模板我们已经为 Solid JS 创建了一个使用当前软件包的 模板,您可以使用它。 |