用于 客户端 SDK 的Solid JS 绑定。 包括钩子、组件和 实用程序,以便在 Telegram Mini Apps 平台上轻松使用 Solid JS。
$ Q" I8 i0 Y. @2 t4 G& s# Z& l, }' L8 ~8 Y% s: f5 X9 d
! k7 v( L% {0 j+ {* `+ ]# E% H1 X4 L
安装在此之前,我们假定您已经安装了 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';
( y! F3 E7 u/ n6 o, M - $ C4 A+ t. l8 [# `! W- U' q
- /**
/ f H8 e( o! n8 V - * Root component for the whole project.
, j8 [/ v4 L) Y2 h6 L/ Q - */
% F; F, T: A& Y% f( K8 |+ x7 X - export function Root() {+ Q/ \* f& z1 h- f; t" L) X
- return (4 J0 L2 L+ M# G" L
- <SDKProvider acceptCustomStyles debug>
* \. b4 N2 `& F: g5 p9 Y2 u; s - <div>My application!</div>8 y2 q$ v+ y/ W$ k/ T' X# N
- </SDKProvider>0 Z, e0 @! p! X8 A, {& H+ p, ~
- );' N4 D8 S- h1 M( [
- }
复制代码 Hooks该软件包中的每个组件钩子都会返回一个自定义信号。 返回的信号包含一个 属性 error?: unknown,如果在组件 初始化过程中出现问题,该属性将被设置。 调用包含该属性的信号将导致产生相应的 错误。 如果没有错误发生,信号将返回一个组件实例。 为了更好地理解,每个组件钩子都使用各自与组件相关的 init 函数。 如果 init 函数返回的是非承诺值,钩子将立即检索该值。 如果 init 函数 是异步的,那么当组件 仍在初始化时,钩子将返回一个带有 undefined 值的信号。 然后,它将更新为初始化值。 下面就是一个例子: - import { useBackButton, useViewport } from '@telegram-apps/sdk-solid';
" ^" ~& X# v, v! z
! [9 i: K$ A2 F8 s f6 r& w J- // BackButton initializes synchronously. So, bb will be a signal
" {5 Q" @& q7 C9 _4 x+ P- C - // returning an instance of BackButton.
* \5 m" U# Y0 g8 J - const bb = useBackButton();
1 c7 p4 _2 |4 ^6 ~% O - const bbV = bb(); // will be BackButton8 z y8 J }/ g: h9 @
- ( C0 K8 L9 A+ @- M
- // Viewport is being initialized asynchronously, so signal may return undefined., Q: M6 D0 o+ z. w. j# z$ Z& F; }
- // After some time it will receive a valid value.
$ e5 ]9 l, p( e+ O; a( o2 M; f - const vp = useViewport();6 J0 z+ f* R ]" ^, E# _& @- }
- const vpV = vp(); // will be undefined
, p: p# m/ [; k, y4 B6 C0 J9 k f
8 }6 L+ ?& i( E0 W- // ...after some time
/ [2 v* y# m& m4 \' H% C. y; s - const vpV2 = vp(); // will be Viewport
复制代码需要注意的是,所有成分的属性都是反应性的。 因此,如果钩子信号返回的值发生变化 ,信号本身不会收到通知。 这是因为 组件本身没有变化,但其属性发生了变化。 让我们来看看这个例子: - import { useViewport } from '@telegram-apps/sdk-solid';
4 e- j( _# [: E) A* B' i o5 r) } - import { createEffect } from 'solid-js';
& [8 h6 f8 @! K i: o& ` - 6 A Q. s& Y3 G& e; T
- // Let's assume that viewport is already initialized.3 {/ r: z# k" A. i7 W
- const vp = useViewport();1 O3 f( l) b6 |$ d
1 V1 L7 `+ x8 E* d6 t' C5 g- createEffect(() => {3 s/ h/ [# n9 _ j# C2 N
- // This line of code will not be called if the viewport height
- G* e# H. e# |( x1 Q( ^; M - // or expansion state changes.
5 }7 J# r# e5 R( w k- O7 _9 `* I8 [, e4 G - console.log('Viewport changed', vp());( i d! J0 N# V4 v- n3 ?6 q9 z
- });
$ h& M2 F- ?- c2 T* V - 4 ~7 ^6 ~4 _: K7 R, I8 K5 f$ E
- createEffect(() => {; H( [* s5 q$ d- {2 o6 @
- // But this line of code will be called every time the viewport
6 R, b4 l/ _7 U( M% H" V$ F9 h* d - // height changes.' e1 J/ [$ ]; C$ x8 k! x
- console.log('Viewport height changed', vp().height);+ f' `. ]9 ~- z/ q3 G- @" `# S
- });
复制代码我们拥有这种细粒度的反应能力,以提供最佳性能,就像 Solid 本身一样。 " j4 [" j3 n) z3 p( c
HOCs所有软件包的高阶组件都使用了前面所述的钩子。 使用方法相当 简单: - import { withBackButton } from '@telegram-apps/sdk-solid';
9 q* o+ Y" @. w: X7 o% v$ y8 | - 1 I z W( j/ o c4 A
- const MyComponent = withBackButton('bb', (props) => {
( H6 @. Y2 H! e+ d$ w" @4 V - createEffect(() => {
" A. t; `, v2 V7 S, |0 `7 |9 k( T - props.bb().show();
, r. o/ w6 p+ V - });8 Z2 m6 w7 }( }- l% ~
- return null;
1 H+ c0 K% F, C) l" X9 @ - });
复制代码 作为第一个参数,您必须传递一个负责接收 钩子结果的组件属性名称的值。 请注意,接收到的值将是一个信号,而不是后面的值。
$ J, G0 W. i' AHooks 和 HOCs 列表[td]模板我们已经为 Solid JS 创建了一个使用当前软件包的 模板,您可以使用它。 |