FastComments.com

Add Comments to Your SolidJS App


Це офіційна бібліотека SolidJS для FastComments.

Вбудуйте віджети для живих коментарів, чату та рецензування у ваш застосунок SolidJS.

Репозиторій

Переглянути на GitHub


Встановлення Internal Link

npm install fastcomments-solidjs

Використання Internal Link

import { FastCommentsCommentWidget } from 'fastcomments-solidjs';

export default function App() {
  return <FastCommentsCommentWidget tenantId="demo" urlId="some-page-id" />;
}

Реагування на зміни конфігурації (імперативний обробник) Internal Link

Solid не відстежує автоматично глибокі мутації в довільних об'єктах, тому зміни конфігурації після першого рендеру потрібно передавати явно. Кожен віджет приймає apiRef, який повертає дескриптор; викликайте handle.update(partial) з createEffect, щоб забезпечити реактивність:

import { createEffect, createSignal } from 'solid-js';
import { FastCommentsCommentWidget, type FastCommentsCommentWidgetHandle } from 'fastcomments-solidjs';

export default function Paginated() {
  const [page, setPage] = createSignal(0);
  let handle: FastCommentsCommentWidgetHandle | undefined;
  createEffect(() => handle?.update({ urlId: `product-${page()}` }));

  return (
    <>
      <button onClick={() => setPage(page() + 1)}>next</button>
      <FastCommentsCommentWidget
        apiRef={(h) => (handle = h)}
        tenantId="demo"
        urlId={`product-${page()}`}
      />
    </>
  );
}

update() безпечно викликати в будь-який момент:

  • Before the script has loaded: the partial is stashed and applied at init.
  • During an async init (reviews-summary, user-activity-feed): the partial is queued and applied when the callback resolves.
  • After init: it forwards straight to the live widget's .update() method.

Імперативний API дескриптора

interface WidgetHandle<Config> {
  getInstance: () => WidgetInstance | null;   // останній активний екземпляр (або null до монтування)
  onInstance: (cb: (instance: WidgetInstance) => void) => void; // викликається, коли екземпляр готовий
  update: (partial: Partial<Config>) => void; // зливає і передає конфігурацію
}

Використовуйте getInstance() для імперативних дій, які не покриває .update(), наприклад openProfile:

const openProfile = () =>
  (handle?.getInstance() as { openProfile?: (o: { userId: string }) => void } | null)
    ?.openProfile?.({ userId: 'demo' });

Компоненти Internal Link

Кожен віджет з fastcomments-react доступний під тією ж назвою:

Component Handle type Embed loaded
FastCommentsCommentWidget FastCommentsCommentWidgetHandle Флагманський віджет для коментування в реальному часі
FastCommentsCommentCountWidget FastCommentsCommentCountWidgetHandle Вбудований бейдж із кількістю коментарів
FastCommentsLiveChatWidget FastCommentsLiveChatWidgetHandle Віджет потокового чату в реальному часі
FastCommentsCollabChatWidget FastCommentsCollabChatWidgetHandle Спільний чат, прив'язаний до тексту
FastCommentsImageChatWidget FastCommentsImageChatWidgetHandle Коментарі до зображень на основі регіонів
FastCommentsRecentCommentsWidget FastCommentsRecentCommentsWidgetHandle Стрічка останніх коментарів
FastCommentsRecentDiscussionsWidget FastCommentsRecentDiscussionsWidgetHandle Стрічка останніх обговорень
FastCommentsReviewsSummaryWidget FastCommentsReviewsSummaryWidgetHandle Зведення рейтингу за зірками
FastCommentsTopPagesWidget FastCommentsTopPagesWidgetHandle Рейтинг сторінок за кількістю коментарів
FastCommentsUserActivityFeedWidget FastCommentsUserActivityFeedWidgetHandle Хронологія активності користувача

Віджети, які приєднуються до існуючого елемента

FastCommentsCollabChatWidget та FastCommentsImageChatWidget монтуються в елемент, що надається викликачем. Передайте аксесор targetRef, який повертає елемент після монтування:

import { FastCommentsImageChatWidget } from 'fastcomments-solidjs';

export default function ImageChat() {
  let img: HTMLImageElement | undefined;
  return (
    <>
      <img ref={img} src="/screenshot.png" alt="" />
      <FastCommentsImageChatWidget
        tenantId="demo"
        urlId="my-image"
        targetRef={() => img}
      />
    </>
  );
}

Регіони

Передайте region="eu", щоб направити трафік віджетів через кластер ЄС.

Приклади Internal Link

Повний демонстраційний додаток знаходиться в examples/example-showcase/. Він віддзеркалює демонстрацію React і охоплює кожен віджет, а також поширені сценарії (темна тема, пагінація, SSO, зворотні виклики).

cd examples/example-showcase
npm install
npm run dev

Збірка Internal Link

npm install
npm run build       # бібліотека -> dist/
npm test            # перевірка працездатності (smoke test) vitest
npm run build:demo  # демонстрація -> demo-dist/

Потрібна допомога?

Якщо ви зіткнулися з проблемами або маєте питання щодо SolidJS Library, будь ласка:

Участь

Внески вітаються! Будь ласка, відвідайте репозиторій GitHub для інструкцій щодо внесення.