Хочу поднять этот вопрос, так как пытаюсь найти лучший способ работы с моими компонентами. Сейчас вижу два варианта, у обоих есть серьёзные недостатки: я мог бы создать реестр для каждого компонента темы, который рендерит блоки, но это как бы перечёркивает саму идею модульности. Или добавить один глобальный реестр через плагин, но тогда мои компоненты станут зависимыми от наличия этого плагина.
Похоже, что наличие в ядре глобального API для регистрации блоков действительно помогло бы. Что-то, что компоненты тем могли бы использовать для вызова рендеринга блоков, а также для регистрации новых блоков.
Мне нравится работать с подходом на основе блоков, потому что он позволяет разделить ответственность между макетом приложения и содержимым компонентов. Компонент блока просто отвечает за рендеринг своего содержимого, а затем рендерится другим компонентом приложения. Я могу убрать всю логику маршрутов и выходных точек из компонента блока и легко переиспользовать один и тот же блок несколько раз на макете и даже по всему приложению.
Это делает всё более лёгким и переиспользуемым, и в целом это элегантный подход. Было бы здорово, если бы в Discourse была надёжная поддержка этого паттерна.