Comments 10
У Фьюзора нет своего стейт менеджера, но можно интегрировать любую библиотеку примерно такой функцией:
import { update } from "@fusorjs/dom"; // updates component
const connectComponentToDom = (self) => anyObservable.subscribe(() => update(self)); // => unsubscribe()
// usage:
const x = <SomeComponent mount={connectComponentToDom} />
Как вашу библиотеку можно было бы интегрировать во Фьюзор?
Меньше шаблонов. Разработка становится быстрее, предсказуемее и приятнее.
Разрешите не согласится.
const [name, setName] = userStore.useField("user.name");
const [age, setAge] = userStore.useField("user.age");
userStore.useEffect(["user.age"], ([age]) => {
userStore.$.user.name = "qtpy";
});
const userStore = createReactStore(initialState, [], {
customLimitsHistory: ($) => [
["user.age", 5],
[(t) => $.items[t(1)], 3],
],
});
useStore([(t) => $.board[t(row)][t(col)]])
const store = createObservableStore<AppState, DepthPath>(initialState, [], {
customLimitsHistory: ($) => [
["user.age", 5],
[(t) => $.items[t(1)], 3],
],
});
createObservableStore — это реактивная система нового поколения
Увы, но нет.
Я показывал несколько вариантов и специально сделал так чтобы у разработчиков был выбор чтобы каждый мог использовать ту парадигму обновления состояния, которая ближе к их архитектурным предпочтениям или привычкам команды — будь то прямые мутации через proxy, более декларативные обновления через строковые пути с поддержкой typescript, или гибкие селекторы, обеспечивающие точечный контроль.
Вы можете свойствами на прямую взаимодействовать через proxy store.$.user.age = 5
или через систему подписок при помощи строковых путей store.update('user.age', 5)
или же при помощи селекторов как в простонародье называется sotre.update(() => store.$.user.age, 4)
или store.update((t) => store.$.items[t(index)] , 2)
store.$.user.age = 5
Напрямую это так: store.user.age = 5
store.update('user.age', 5)
Лишний вызов функции + непривычный способ обращения к свойству + высокая вероятность опечататься.
sotre.update(() => store.$.user.age, 4)
Лишний вызов уже двух функций + лишний чужеродный $
.
Меньше шаблонов, разработка становится быстрее, предсказуемее и приятнее тогда, когда вы не заставляете разработчика использовать сомнительные конструкциии/обертки для того, что бы удовлетворить потребности вашей «реактивной системы нового поколения».
На счет store.user.age = 5
- разработчики сами должны решать, работать ли напрямую с proxy-объектом store.$
или использовать систему подписок.
Я ни раз писал о типобезопасных строках в этой статье , в оф. документации все расписано @qtpy/state-management-observable
.
если вы опечатаетесь store.update('user.agesdfsdfs', 5)
вам выдаст ошибку

спасибо большое за оценку - добавил изменения в селекторе , уже запушил и документации подправил, сейчас эту статью изменю:
//до:
store.get((t) => store.$.board[t(row)][t(col)])
store.get(() => store.$.user.age)
//после:
store.get(($, t) => $.board[t(row)][t(col)])
store.get(($) => $.user.age)
и в правду так лучше стало , а то "store" может иметь любое название , и тогда из-за длинного название плохая будет читабельность.
это реактивная система нового поколения
какие громкие слова) это видимо от незнания? ведь уже 3 года существует обёртка над сигналами от команды Preact, которая даёт возможность при изменении состояния сигнала перерисовать значение конкретного тега в разметке(всех тегов, которые ссылаются на сигнал), не тревожа ничего вокруг никакими ререндерами. и не понадобятся никакие createReactStore
и прочий бойлерплейт
Да я с вами полностью солидарен однозначно что сигналы это очень хороший инструмент и удобный , и на счет громких слов. Но не все его могут использовать или интегрировать без последствий. Некоторые разработчики — включая команду React — считают, что сигналы нарушают базовые принципы реактивной архитектуры, особенно при конкурентном рендеринге. Есть опасения, что они ломают однонаправленный поток данных, напоминают старые решения вроде KnockoutJS и могут усложнить масштабирование крупных приложений. Поэтому, несмотря на свою эффективность, сигналы подходят далеко не всем — особенно в проектах с высокими требованиями к стабильности и предсказуемости.
CreateObservableStore: реактивный store с гранулярными подписками и идеальной интеграцией с React