Comments 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 в иммутаблы ну никак не абстрагируется.
Знание и состояние