Распространённые возможности
Объект контекста предоставляет различные встроенные возможности NocoBase. При этом некоторые доступны только в Plugin, другие — только в компонентах, третьи — в обоих местах, но с разным синтаксисом. Сначала общая таблица:
Ниже разбирается каждая возможность по namespace.
API-запрос (ctx.api)
Через ctx.api.request() вызываются бэкенд-интерфейсы, использование совпадает с Axios.
Использование в Plugin
Использование в компонентах
В сочетании с ahooks useRequest
В компонентах можно использовать useRequest из ahooks для упрощения управления состоянием запроса:
Перехватчики запросов
Через ctx.api.axios можно добавлять перехватчики запросов/ответов, обычно настраиваемые в load() Plugin:
Пользовательские заголовки запроса NocoBase
Сервер NocoBase поддерживает следующие пользовательские заголовки запроса. Обычно они автоматически вставляются перехватчиком, и устанавливать их вручную не нужно:
Интернационализация (ctx.t / ctx.i18n)
Плагин NocoBase управляет файлами многоязычной локализации через каталог src/locale/, а в коде использует переводы через ctx.t().
Файлы многоязычной локализации
Создайте JSON-файлы по языкам в src/locale/ плагина:
При первом добавлении файла языка нужно перезапустить приложение, чтобы он вступил в силу.
ctx.t()
В компонентах через ctx.t() получают переведённый текст:
this.t()
В Plugin использовать this.t() удобнее — он автоматически подставляет имя пакета плагина в качестве namespace, передавать ns вручную не нужно:
ctx.i18n
ctx.i18n — это нижележащий экземпляр i18next. Обычно достаточно ctx.t(). Однако если Вам нужно динамически переключать язык, отслеживать изменения языка и т.д., можно использовать ctx.i18n:
tExpr()
tExpr() используется для генерации строки отложенного перевода, обычно используется в FlowModel.define() — потому что define выполняется на этапе загрузки модуля, и в этот момент ещё нет экземпляра i18n:
Более полное использование интернационализации (формат файлов перевода, хук useT, tExpr и т.д.) см. в i18n Интернационализация. Полный список языков, поддерживаемых NocoBase, см. в Список языков.
Логирование (ctx.logger)
Через ctx.logger выводятся структурированные логи на основе pino.
Использование в Plugin
Использование в компонентах
Уровни логирования по убыванию: fatal > error > warn > info > debug > trace. Выводятся только логи уровня выше или равного текущему настроенному.
Маршрутизация (ctx.router / ctx.route / ctx.location)
Возможности маршрутизации делятся на три части: регистрация (только в Plugin), навигация и получение информации (только в компонентах).
Регистрация маршрута (this.router / this.pluginSettingsManager)
В load() плагина через this.router.add() регистрируются маршруты страниц, через this.pluginSettingsManager регистрируется страница настроек плагина:
Подробнее см. в Router (Маршрутизация). Полный пример страницы настроек см. в Создание страницы настроек плагина.
this.router — это RouterManager, используется для регистрации маршрутов. this.pluginSettingsManager — это PluginSettingsManager, используется для регистрации страницы настроек. Ни одно из них не совпадает с ctx.router (React Router, используется для навигации между страницами) в компонентах.
Навигация (ctx.router)
В компонентах через ctx.router.navigate() выполняется переход между страницами:
Информация о маршруте (ctx.route)
В компонентах через ctx.route получают информацию о текущем маршруте:
Полный тип ctx.route:
Текущий URL (ctx.location)
ctx.location предоставляет подробную информацию о текущем URL, аналогично window.location браузера:
Хотя ctx.route и ctx.location доступны через this.context и в Plugin, на момент загрузки плагина URL не определён, и полученные значения не имеют смысла. Рекомендуется использовать в компонентах.
Управление видами (ctx.viewer / ctx.view)
ctx.viewer предоставляет императивную возможность открытия модальных окон, выдвижных панелей и других видов. Доступен и в Plugin, и в компонента х.
Использование в Plugin
Использование в компонентах
Универсальный метод
Операции внутри вида (ctx.view)
В компонентах внутри модального окна/выдвижной панели через ctx.view можно управлять текущим видом (например, закрывать его):
FlowEngine (this.flowEngine)
this.flowEngine — это экземпляр FlowEngine, доступный только в Plugin. Обычно используется для регистрации FlowModel:
FlowModel — это ядро системы визуальной конфигурации NocoBase. Если Ваш компонент должен появиться в меню «Добавить блок / поле / действие», его нужно обернуть через FlowModel. Подробное использование см. в FlowEngine.
Дополнительные возможности
Следующие возможности могут потребоваться в более продвинутых сценариях, кратко перечислим их здесь:
Подробное использование этих возможностей см. в полной документации FlowEngine.
Связанные ссылки
- Обзор Context — сходства и различия двух точек входа в контекст
- Plugin (Плагин) — сокращённые свойства Plugin
- Разработка Component-компонентов — использование useFlowContext в компонентах
- Router (Маршрутизация) — регистрация и навигация маршрутов
- Полная документация FlowEngine — полный справочник FlowEngine
- i18n Интернационализация — формат файлов перевода, tExpr, useT
- Список языков — поддерживаемые NocoBase коды языков
- Создание страницы настроек плагина — полный пример использования ctx.api
- Обзор FlowEngine — базовое использование FlowModel

