
Язык 🇺🇦 Русский (Украина)
Документация
Начало работы
Использование
Конфигурация
Add Comments to Your SolidJS App
Это официальная библиотека SolidJS для FastComments.
Встраивайте виджеты живых комментариев, чата и рецензий в ваше приложение на SolidJS.
Репозиторий
Живая демонстрация 
Попробуйте все виджеты вживую на https://fastcomments.com/commenting-system-for-solidjs.
Использование 
import { FastCommentsCommentWidget } from 'fastcomments-solidjs';
export default function App() {
return <FastCommentsCommentWidget tenantId="demo" urlId="some-page-id" />;
}
Реагирование на изменения конфигурации (императивный обработчик) 
Solid не отслеживает автоматически глубокие мутации произвольных объектов, поэтому изменения config после первого рендера должны быть отправлены явно. Каждый виджет принимает apiRef, который возвращает handle; вызовите 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() безопасно вызывать в любой момент:
- До загрузки скрипта: partial сохраняется и применяется при init.
- Во время асинхронной инициализации (reviews-summary, user-activity-feed): partial ставится в очередь и применяется, когда callback разрешится.
- После init: он напрямую перенаправляется в метод
.update()живого виджета.
Императивный handle 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' });
Компоненты 
Каждый виджет из 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 монтируются в элемент, предоставленный вызывающей стороной.
Передайте 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", чтобы направить трафик виджета через кластер ЕС.
Нужна помощь?
Если вы столкнулись с проблемами или у вас есть вопросы по библиотеке SolidJS, пожалуйста:
Участие
Вклады приветствуются! Пожалуйста, посетите репозиторий на GitHub для руководства по внесению вклада.