Вызов функции хранения Mobx в другом компоненте Observer

У меня есть магазин Mobx, и я передаю это хранилище внутри провайдера, и когда я утешаю this.props, он показывает структуру хранилища Mobx.

Ниже мой магазин Mobx

import { observable, computed, action, useStrict, runInAction, toJS } from 'mobx';

// useStrict(true);

class OpenPropertiesStore {

  @observable openProperties = {};

  @action
  fetchOpenProperties() {
    fetch(`http://uinames.com/api/`)
      .then(res => res.json())
      .then(data => {
        runInAction(() => {
          this.openProperties = data;
          this.name = "abhinav";
        })
      })
  }

  @computed get getOpenProperties() {
    return this.openProperties;
  }

}

export default new OpenPropertiesStore();

Внутри компонента я вызываю ComponentDidMount, где, если я печатаю «this.props», он показывает магазин. Но я не могу вызвать такую ​​функцию

@inject('UserStore', 'CityStore', 'OpenPropertiesStore')
@observer
export default class Navigation extends Component {
   componentDidMount = async () => {
      const { CityStore, UserStore, OpenPropertiesStore } = this.props;
      const data = OpenPropertiesStore.getOpenProperties();
   }
}

выдает мне ошибку

YellowBox.js: 67 Возможный необработанный отказ от обещания (id: 0): TypeError: OpenPropertiesStore.getOpenProperties не является функцией TypeError: OpenPropertiesStore.getOpenProperties не является функцией

кто знает как решить эту ошибку


person abankitbaid    schedule 29.01.2019    source источник
comment
У вас ошибка в коде. Вместо того, чтобы выполнять задание в методе componentDidMount, вы переопределяете его для этого конкретного компонента. componentDidMount = async () => - вы перезаписываете метод. Но нужно componentDidMount(){ your code here}   -  person Shevchenko Viktor    schedule 29.01.2019


Ответы (1)


Вычисляемый MobX не должен вызываться как функция, обращайтесь к ним как к свойству.

const data = OpenPropertiesStore.getOpenProperties;

Кроме того, если вы просто хотите вернуть свойство из хранилища - не нужно писать для него отдельный @computed, так как вы не выполняете в нем никаких вычислений. Просто доступ к нему напрямую

const data = OpenPropertiesStore.openProperties;
person Shevchenko Viktor    schedule 29.01.2019