Remix
отлично работает с MobX, поскольку он использует React в качестве UI-библиотеки. MobX можно использовать для управления состоянием клиентского приложения, сохраняя реактивность и удобство работы.
Приведем пример:
Создадим простое хранилище в app/store.ts
:
import { makeAutoObservable } from "mobx";
class CounterStore {
count = 0;
constructor() {
makeAutoObservable(this);
}
increment() {
this.count += 1;
}
decrement() {
this.count -= 1;
}
}
export const counterStore = new CounterStore();
В файле app/routes/counter.tsx
подключаем MobX и используем состояние:
import { observer } from "mobx-react-lite";
import { counterStore } from "~/store";
const Counter = observer(() => {
return (
<div>
<h1>Счетчик: {counterStore.count}</h1>
<button onClick={() => counterStore.increment()}>+</button>
<button onClick={() => counterStore.decrement()}>-</button>
</div>
);
});
export default Counter;
makeAutoObservable()
делает объект реактивным.observer
оборачивает компонент, чтобы MobX мог автоматически обновлять UI при изменении состояния.- Кнопки вызывают методы
increment()
иdecrement()
, изменяя состояние.