FastComments.com

Додайте коментарі до вашого застосунку SolidJS

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

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

Репозиторій

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


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

npm

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 доступний під тією ж назвою:

ComponentHandle typeEmbed loaded
FastCommentsCommentWidgetFastCommentsCommentWidgetHandleФлагманський віджет для коментування в реальному часі
FastCommentsCommentCountWidgetFastCommentsCommentCountWidgetHandleВбудований бейдж із кількістю коментарів
FastCommentsLiveChatWidgetFastCommentsLiveChatWidgetHandleВіджет потокового чату в реальному часі
FastCommentsCollabChatWidgetFastCommentsCollabChatWidgetHandleСпільний чат, прив'язаний до тексту
FastCommentsImageChatWidgetFastCommentsImageChatWidgetHandleКоментарі до зображень на основі регіонів
FastCommentsRecentCommentsWidgetFastCommentsRecentCommentsWidgetHandleСтрічка останніх коментарів
FastCommentsRecentDiscussionsWidgetFastCommentsRecentDiscussionsWidgetHandleСтрічка останніх обговорень
FastCommentsReviewsSummaryWidgetFastCommentsReviewsSummaryWidgetHandleЗведення рейтингу за зірками
FastCommentsTopPagesWidgetFastCommentsTopPagesWidgetHandleРейтинг сторінок за кількістю коментарів
FastCommentsUserActivityFeedWidgetFastCommentsUserActivityFeedWidgetHandleХронологія активності користувача

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

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 для інструкцій щодо внесення.