Каким образом можно изменить состояние MobX в классе?

Как вызвать экшн в классе стора MobX для изменения данных в сторе из другого класса без наличия рендеринга? К примеру, есть класс DataService, который должен вызвать метод класса стора MobX (экшн) для внесения изменений в стор. В функциональном стиле это реализуется с помощью const { callsStore, dataStore } = useRootStore(); Однако, как эту операцию выполнить в классе, который не занимается рендерингом, а лишь работает с данными и должен вернуть их обновленное состояние обратно в стор для последующего отображения на функциональных компонентах экранов?
  • 12 августа 2024 г. 13:03
Ответы на вопрос 2
Для изменения состояния MobX в классе можно использовать метод `@action`, который позволяет изменять состояние стора внутри класса. Например:

```javascript
import { action } from 'mobx';

class SomeClass {
  @action updateData(value) {
    this.dataStore.someProperty = value;
  }
}
```

Чтобы вызвать экшн в сторе MobX из другого класса, не связанного с рендерингом, достаточно импортировать стор и вызвать нужный метод напрямую. Например:

```javascript
import { callsStore } from './stores';

class DataService {
  updateData(value) {
    callsStore.updateData(value);
  }
}
```

После вызова метода `updateData` из класса `DataService` данные будут изменены в сторе и можно обновить компоненты, которые используют эти данные для отображения на экранах.
в метод класса DataService надо передать экземпляр стора: 
class DataService {
  method(callsStore) {
    ...
    callsStore.setCall(...);
  }
}


----
Но вообще, по идее, правильнее (имхо, конечно), чтобы DataService только возвращал данные в виде промиса. А вызывать его метод, получать данные и складывать их в стор будет какой-то посредник. Либо стор "сам себе на уме" и может самостоятельно обновлять свои данные, используя сервис (экземпляр которого передали ему в конструктор, например). Впрочем, это всё дело вкуса.
Похожие вопросы