Как стать автором
Обновить

Комментарии 9

Я бы еще добавил в копилку систем управления внешним состоянием ("знанием" в Вашей терминологии) всяческие библиотеки для кеширования вроде zeit/swr или react-query, в которых поддерживается концепция Query / Mutation.


Если проводить аналогию с базами данных, то GraphQL будет как полноценная реляционка.
А эти так, key-value. Зато никаких ограничений на источники данных.

"Мы уже научились разделять представление и остальное приложение, и мы знаем, как это делать правильно."
Серьезное заявление.

Спасибо автору! Я тоже считаю, что с фронтом что-то не так. Что-то не так в голове.


Но мне кажется, проблема современного фронта в странном восприятии проблемы "состояния". Мы почему-то хотим им управлять, подходы придумываем. Вот вы предложили отделять "состояние" от "знания". А разве это не основная идея сокрытия данных (инкапсуляции)? То есть, обеспечив инкапсуляцию, мы могли бы избавиться от любых мыслей про состояние, и от проблем связанных с ним.

Люди помешались с этими "стейт-менеджерами", гребя в одну кучу совершенно разные вещи.


Реактивность — она про синхронизацию множества состояний.


Flux-like про то, чтобы не иметь множества состояний, а хранить всё в одной глобальной переменной.


RX-like вообще не про состояния, оно про потоки событий с фиксированной конфигурацией. На базе RX-like можно реализовать реактивность, а можно не реализовать.


MobX-like как раз именно про реактивность с динамической конфигурацией потоков данных.


К "управлению" состоянием ни то ни другое не относится. Управление — это мутаторы в моделях. Редьюсеры в redux-linke- это частный случай одного большого мутатора для одной большой модели.


Для прочищения сознания предлагаю взглянуть на NgRx — это этакий redux, который использует rx для уведомления об изменениях.


Источником истины в реактивной среде может быть как глобальная переменная (MST,vuex), так и нет. Более того, часто источником истины выступает внешнее состояние (location, history, localStorage, sessionStorage, server, p2p-net, indexedDB, page layout, dom-state).


Внешнее от внутреннего отличается лишь тем, что первое мы контролируем не полностью и оно может поменяться независимо от того, что мы написали в коде.


Всякие GraphQL — это про просто протокол общения с сервером. Я выше перечислил кучу состояний, которые являются внешними, но совсем не являются серверными апи. То же состояние DOM в иммутаблы ну никак не абстрагируется.

НЛО прилетело и опубликовало эту надпись здесь

Речь о том, что есть куча разных апи для доступа к разным состояниям, а не одно, чтобы править всеми?

НЛО прилетело и опубликовало эту надпись здесь
В вашем случае Знание — это read-only дерево полученное с бекенда. А Состояние это локальное деверо. По сути это стандартная mvc модель, которая запрещает менять данные напрямую.
Состояние по типу Redux, как набор значений параметров системы в произвольный момент времени, похоже на частицу — его можно наблюдать, измерить, восстановить. Состояние с точки зрения rxjs это последовательность реакций на изменение, что скорее напоминает волну. Тут сложно сказать в каком именно состоянии сейчас находится вся система или как её перевести в это состояние, но за то в такой модели удобно описывать временные и причинно-следственные связи.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации