@artur_kud
Frontend Developer

Как получить данные с хранилища MobX?

Здравствуйте, у меня есть index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';

import { Found } from 'components/pages';
import { NotFound } from 'components/pages';

import { Provider, inject, observer } from 'mobx-react';
import { routes } from 'routes/routes';

import UserStore from 'store/UserStore';
import * as overrides from 'overrides/overrides';

import './_index.scss';

const stores = {
    UserStore
};

const Root = inject('UserStore')(observer(({ UserStore }) => {
    const { user, getUser } = UserStore;

    const currentCabinet = localStorage.getItem('currentCabinet');
    const correctPaths = routes[currentCabinet] && Object.keys(routes[currentCabinet]).map(route => routes[currentCabinet][route].path);

    console.log(user) // Выводит Proxy

    return (
        <Router>
            <Switch>
                <Route exact path = { correctPaths } component = { Found } />
                <Route path = '*' component = { NotFound } />
            </Switch>
        </Router>
    )
}));

ReactDOM.render((
    <Provider { ...stores }>
        <Root />
    </Provider>
), document.querySelector('#Root'));


Скрин Proxy объекта:

5da7370936be9448493998.png

Еще есть хранилище пользователя UserStore.js:

// Хранилище пользователя

import { action, observable, runInAction, decorate } from 'mobx';

import { request } from 'helpers';
import { BASE_URL } from 'constants/constants';

class UserStore {
    user = {
        activeCabinet: 'asd',
        subCabinet: null
    }

    // Получение пользователя
    async getUser() {
        const response = await request(`${BASE_URL}/api/user`);

        if (response.status === 200) {
            const data = await response.json();
            const user = Object.clone(this.user, data);
            
            runInAction(() => this.user = user);
        }
    }
}

decorate(UserStore, {
    'user': observable,
    'getUser': action.bound
});

export default new UserStore();


Чтобы получить получить свойство activeCabinet приходится писать get(user, 'activeCabinet'). Возможно ли получить его напрямую?
  • Вопрос задан
  • 49 просмотров
Решения вопроса 1
pterodaktil
@pterodaktil
js developer
вообще говоря, можно достучаться напрямую
user.activeCabinet

toJS
либо spread
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
12 нояб. 2019, в 04:24
2500 руб./за проект
12 нояб. 2019, в 01:32
25000 руб./за проект