# Обзор расширений блоков

В NocoBase 2.0 механизм расширения блоков был значительно упрощен. Разработчикам достаточно унаследовать соответствующий базовый класс **FlowModel** и реализовать необходимые методы интерфейса (в основном метод `renderComponent()`), чтобы быстро создавать собственные блоки.

## Категории блоков

NocoBase делит блоки на три категории, которые отображаются в группах в интерфейсе конфигурации:

*   **Блоки данных (Data blocks)**: Блоки, наследующие `DataBlockModel` или `CollectionBlockModel`.
*   **Блоки фильтров (Filter blocks)**: Блоки, наследующие `FilterBlockModel`.
*   **Другие блоки (Other blocks)**: Блоки, напрямую наследующие `BlockModel`.

> Группировка блоков определяется соответствующим базовым классом. Логика классификации основана на отношениях наследования и не требует дополнительной настройки.

## Описание базовых классов

Система предоставляет четыре базовых класса для расширений:

### BlockModel

**Базовая модель блока**, самый универсальный базовый класс для блоков.

*   Подходит для блоков, предназначенных только для отображения и не зависящих от данных.
*   Относится к группе **Other blocks** (Другие блоки).
*   Применим для индивидуальных сценариев.

### DataBlockModel

**Модель блока данных (не привязанная к таблице данных)**, предназначена для блоков с пользовательскими источниками данных.

*   Не привязывается напрямую к таблице данных, позволяет настраивать логику получения данных.
*   Относится к группе **Data blocks** (Блоки данных).
*   Применим для: вызова внешних API, пользовательской обработки данных, статистических диаграмм и т.д.

### CollectionBlockModel

**Модель блока коллекции**, для блоков, которые должны быть привязаны к таблице данных.

*   Базовый класс модели, требующий привязки к таблице данных.
*   Относится к группе **Data blocks** (Блоки данных).
*   Применим для: списков, форм, канбан-досок и других блоков, явно зависящих от определенной таблицы данных.

### FilterBlockModel

**Модель блока фильтра**, используется для создания блоков условий фильтрации.

*   Базовый класс модели для построения условий фильтрации.
*   Относится к группе **Filter blocks** (Блоки фильтров).
*   Обычно работает в связке с блоками данных.

## Как выбрать базовый класс

При выборе базового класса вы можете следовать следующим принципам:

*   **Если требуется привязка к определенной таблице данных**: Отдайте предпочтение `CollectionBlockModel`.
*   **Если источник данных пользовательский**: Выберите `DataBlockModel`.
*   **Если блок предназначен для установки условий фильтрации и взаимодействия с блоками данных**: Выберите `FilterBlockModel`.
*   **Если вы не уверены, как классифицировать блок**: Выберите `BlockModel`.

## Быстрый старт

Создание пользовательского блока требует всего три шага:

1.  Унаследуйте соответствующий базовый класс (например, `BlockModel`).
2.  Реализуйте метод `renderComponent()`, который возвращает React-компонент.
3.  Зарегистрируйте модель блока в плагине.

Подробные примеры вы найдете в разделе [Написание плагина блока](./write-a-block-plugin).