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 не проследява автоматично дълбоки промени в произволни обекти, така че промените в конфигурацията след първото рендиране трябва да бъдат подадени явно. Всеки widget приема 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() е безопасно да се извиква по всяко време:

  • Преди скриптът да е зареден: частичният обект се запазва и се прилага при инициализация.
  • По време на асинхронна инициализация (reviews-summary, user-activity-feed): частичният обект се поставя в опашка и се прилага, когато callback-ът се изпълни.
  • След инициализация: той директно препраща към .update() метода на живия widget.

Императивен API на handle

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


Всеки widget от fastcomments-react е наличен под същото име:

Component Handle type Вградено съдържание
FastCommentsCommentWidget FastCommentsCommentWidgetHandle Флагмански widget за коментари в реално време
FastCommentsCommentCountWidget FastCommentsCommentCountWidgetHandle Инлайн значка за брой коментари
FastCommentsLiveChatWidget FastCommentsLiveChatWidgetHandle Поточен widget за чат в реално време
FastCommentsCollabChatWidget FastCommentsCollabChatWidgetHandle Съвместен чат, прикрепен към текст
FastCommentsImageChatWidget FastCommentsImageChatWidgetHandle Коментари върху изображения по региони
FastCommentsRecentCommentsWidget FastCommentsRecentCommentsWidgetHandle Фийд с последни коментари
FastCommentsRecentDiscussionsWidget FastCommentsRecentDiscussionsWidgetHandle Фийд с последни дискусии
FastCommentsReviewsSummaryWidget FastCommentsReviewsSummaryWidgetHandle Обобщение на оценки със звезди
FastCommentsTopPagesWidget FastCommentsTopPagesWidgetHandle Класация на най-коментираните страници
FastCommentsUserActivityFeedWidget FastCommentsUserActivityFeedWidgetHandle Хронология на активността на потребителя

Уиджети, които се прикрепят към съществуващ елемент

FastCommentsCollabChatWidget и FastCommentsImageChatWidget се монтират в елемент, предоставен от извикващия. Подайте accessor 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" за да пренасочите трафика на widget-а през клъстъра в ЕС.

Примери Internal Link

Пълно демонстрационно приложение се намира в examples/example-showcase/. То отразява демонстрацията за React и обхваща всеки уиджит, плюс общи потоци (тъмен режим, пагинация, SSO, callbacks).

cd examples/example-showcase
npm install
npm run dev

Изграждане Internal Link

npm install
npm run build       # library -> dist/
npm test            # vitest smoke test
npm run build:demo  # showcase -> demo-dist/

Нужда от помощ?

Ако срещнете проблеми или имате въпроси относно библиотеката SolidJS, моля:

Принос

Приносите са добре дошли! Моля, посетете репозитория в GitHub за указания относно приноса.