A
A
Artur Kudashev2019-10-16 18:28:15
JavaScript
Artur Kudashev, 2019-10-16 18:28:15

How to get data from MobX storage?

There is 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'));

Screenshot of the Proxy object:
5da7370936be9448493998.png
There is also a user store 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();

To get the activeCabinet property, you have to write get(user, 'activeCabinet'). Is it possible to get it directly?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
Петр Мухуров, 2019-10-18
@archi_kud

вообще говоря, можно достучаться напрямую
toJS
либо spread

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question