ngrx накладывает множество ограничений на возможности расширения вашего приложения. Основная и самая главная проблема, что все ваше состояние хранится в рутовом скоупе. Это значит, что так или иначе вам придется писать/генерировать лишний бойлерплейт.
Такие решения хорошо подходят для хранения каких-то общих и глобальных данных. Например, различные конфиги, счетчики и прочее. Поэтому очень не рекомендую рассматривать ngrx и ngxs с точки зрения основного стейт менеджера для своего приложения.
С Akita ситуация обстоит гораздо лучше, так как она позволяет делить состояние приложения на различные сторы. Но это все еще не избавляет от ряда проблем, например, у вас не будет возможности налету создавать новые сторы для управления состояниями ваших компонентов.
Так же есть angular-ngrx-data, который сам генерирует бойлерплейт для вложенных стейтов.
Поэтому, если:
— стейтов будет мало, то ngrx/ngxs вполне подойдут;
— стейтов будет больше и потребуются новые, то ngrx+angular-ngrx-data/Akita;
— стейтов будет много, то Akita, а ngrx будет серьезно проседать по производительности;
— если требуется динамика, то ниодно из этих решений не подходит.
Так же очень рекомендую посмотреть на GraphQL, redux (не ngrx), так как они дают большую гибкость для построения архитектуры вашего приложения. И важно принимать решения исходя из задач, которые будет решать приложение. Не стоит забывать, что возможно и обычные сервисы подойдут.