Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > Как организовать mobx store?


Автор: manking 20.8.2018, 12:51
Есть код, где в store в state хранится folder_id, employeesList и currentEmploySelect. То есть текущая папка, список сотрудников и текущий выбранный сотрудник. Store 1 на всё приложение. Сейчас реализовали вывод списка сотрудников папки №6 и очистку этого списка при клике по кнопке.

А дальше надо добавить дерево файловых каталогов чтобы на каждый файл в каталоге был свой список сотрудников. Но компонент каталога должен затем переиспользоваться в другим месте для вывода каталога товаров. То есть на одной странице будет 2 файловых каталога. И каждый со своим состоянием.
Код


import { decorate, observable, configure, action, computed } from "mobx";
import { observer } from "mobx-react";

configure({ enforceActions: true }); // Не допускать изменение состояния вне actions


class Store {
  // Состояние с которым можно работать
  state = {
    folred_id: 3,
    employeesList: [
      { id: 1, name: "John Doe", salary: 150}
    ],
    currentEmploySelect: null
  };

  // Очищаем список сотрудников
  clearList(){
    // Присваивание через копирование
    this.state = {...state , employeesList: []} 
  }

  get currentEmploySelected() {
    return this.state.currentEmploySelect;
  }
}

decorate(Store, {
  // Наблюдаемое свойство
  employeesList: observable,

  // Действие и изменение объекта
  clearList: action,

  // 
  currentEmploySelected: computed
});

export default Store;

Отсюда вопрос, куда и как в этом singleton классе Store добавить еще и данные, свойства и методы для системы каталогов. Например так? Добавив свойства в объект state store в которых и будут хранится данные приложения. Либо же лучше создать еще 1 store где будут храниться данные каталогов?
Код


state = {

    data: {
      employeesList: [{ id: 1, name: "John Doe", salary: 150 }],
      currentEmploySelect: null
    },

    foldersEmployersData: {
      folders: [
        {
          name: "Отдел бухгалтерии",
          id: 6
        }
      ],
      currentOpenFolder: 12
    },
    foldersGoodsData: {
      folders: [{ name: "Электро инструменты", id: 6 }],
      currentOpenFolder: 6
    }
  };

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)