Как вызвать экшн в классе стора MobX и изменить данные в сторе из другого класса
Задача: в методе класса DataService необходимо вызвать экшн (метод) класса стора MobX, который изменит данные в сторе. В функциональном стиле это выглядит так:
const { callsStore, dataStore } = useRootStore();
callsStore.setCall(...);Как реализовать то же самое в классе, где нет рендеринга? Класс выполняет операции с данными и должен вернуть результат в стор, после чего данные отобразятся в функциональных элементах экранов.
Решение
Для доступа к стору из обычного класса (не React-компонента) используйте один из следующих подходов:
- Передайте ссылку на стор через конструктор или метод класса
- Используйте глобальный синглтон стора (если структура приложения позволяет)
- Примените паттерн Dependency Injection (DI) для внедрения стора
Пример с передачей стора через конструктор
class DataService {
private callsStore: CallsStore;
constructor(callsStore: CallsStore) {
this.callsStore = callsStore;
}
public processData(): void {
// Выполнение операций с данными
const callData = { ... };
// Изменение стора
this.callsStore.setCall(callData);
}
}Затем при создании экземпляра DataService передайте стор:
const dataService = new DataService(callsStore);
dataService.processData();Этот подход сохраняет чистоту архитектуры и позволяет легко тестировать класс, подменяя стор на мок.