Как вызвать экшн в классе стора 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();

    Этот подход сохраняет чистоту архитектуры и позволяет легко тестировать класс, подменяя стор на мок.