Skip to content

Другие фреймворки ​

В ядре нет кода под конкретный фреймворк, а его объект состояния следует контракту, который уже понимает большинство реактивных систем: subscribe(listener) сразу вызывает слушателя с текущим значением и возвращает функцию отписки. Этого достаточно, чтобы использовать его со Svelte, Solid и Angular без адаптера. Импортируйте из корня пакета:

ts
import { responsiveState } from 'responsive-media'

responsiveState — общий экземпляр с брейкпоинтами mobile, tablet и desktop по умолчанию. Свои задаются через setResponsiveConfig(), а изолированный экземпляр создаётся через createResponsiveState().

Svelte ​

Состояние как оно есть — стор Svelte, поэтому к нему применим префикс $:

svelte
<script>
  import { responsiveState } from 'responsive-media'
</script>

{#if $responsiveState.mobile}
  <MobileNav />
{:else}
  <DesktopNav />
{/if}

Solid ​

from() принимает любой объект с методом subscribe:

tsx
import { from, Show } from 'solid-js'
import { responsiveState } from 'responsive-media'

function Nav() {
  const responsive = from(responsiveState)
  return (
    <Show when={!responsive()?.mobile} fallback={<MobileNav />}>
      <DesktopNav />
    </Show>
  )
}

Angular ​

Оберните подписку в RxJS Observable и превратите её в сигнал:

ts
import { toSignal } from '@angular/core/rxjs-interop'
import { Observable } from 'rxjs'
import { responsiveState } from 'responsive-media'

const responsive = toSignal(
  new Observable<Record<string, boolean>>((subscriber) =>
    responsiveState.subscribe((state) => subscriber.next({ ...state })),
  ),
  { initialValue: responsiveState.getState() },
)

Функция, которую возвращает responsiveState.subscribe, служит завершающей, поэтому отписка от observable убирает слушателя.

Любая другая библиотека сигналов ​

toSignal(key, factory) привязывает один ключ брейкпоинта к записываемому сигналу формы { value } — см. Утилиты. Для всего остального on(key, callback) и onEnter / onLeave дают колбэки по ключам.

Серверный рендеринг ​

Вне Vue и React библиотека не управляет гидратацией за вас. Засейте сервер через ssrState и подставьте настоящие значения после первого рендера на клиенте, если ваш фреймворк сообщает о несовпадениях.