Рекомендуется ли иметь магазин mobx для каждой страницы? - PullRequest
0 голосов
/ 29 октября 2019

Я создаю одностраничное приложение с Reactjs и MobX на внешнем интерфейсе (порт 3000) и Nodejs и Express на внутреннем интерфейсе (API, порт 4000). Я новичок в обоих, MobX и Reactjs, и я пытаюсь создать хорошо структурированный проект. У меня вопрос: можно ли иметь хранилище для каждого представления?

Например, у меня есть хранилище UserStore, в котором хранится информация о сеансе, а также выполняется вход и выход пользователя из системы на платформе. Однако после входа в систему я хочу перенаправить пользователя на страницу панели инструментов. Эта страница панели инструментов должна получать информацию о пользователе, но также она должна связываться с API и получать некоторые данные (например, некоторые Todos). Вот как я бы это сделал:

Это функция входа в систему, в которой осуществляется перенаправление на Dashboard:

*UserStore.js*

[...]
import  navigationStore  from './NavigationStore';

[...]

login = async (user) => {
  try {
    const res = await axios.post('/session/login', { 
      username: user.username, 
      password: user.password 
    });

    this.saveUser(res.data);
    navigationStore.push('/dashboard'); 
  } catch (error) {
    [...]
  }
}

И затемЯ создал DashboardStore.js, который имеет следующий код:

*DashboardStore.js*

[... imports and initializations ...]
class Store {

  @observable todos = null

  constructor() {
    this.getDashboard();
  }

  @action('Load dashboard') getDashboard =  async () => { 
    const res = await axios.get('/api/dashboard/', {});    
    this.todos = res.todos
  }

}

const DashboardStore = new Store();

export default DashboardStore;

Но это будет означать, что я в конечном итоге сделаю еще один магазин для страницы Todos и другойМагазин для любой страницы мне нужно. В NodeJ вы можете создать контроллер для каждого класса, и в этом нет ничего странного. Тем не менее, я не уверен, что так оно и есть на MobX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...