Самый простой подход состоит в том, чтобы вызывающий activeCategory
передавал данные из Data
в представление.
Это означало бы не использование вычисляемого свойства, хотя:
getActiveCategory(dataStore.whateverPropIsNeeded, ...)
Еслиэти хранилища не являются частью одного и того же дерева. getEnv не будет слишком плохим подходом (в вашем примере они являются частью одного и того же дерева) ..
const DataStore = Data.create({});
const UIStore = UI.create({}, { dataStore });
Тогда в UIStore вы можете это сделать,
const dataStore = getEnv(self).dataStore;
Если они являются частью одного и того же дерева, getEnv не является хорошим подходом, поскольку MST имеет ограничение, согласно которому все узлы в дереве должны иметь одинаковые зависимости (один и тот же объект, возвращаемый getEnv).
В качестве альтернативы, Data может быть дочерним по отношению к пользовательскому интерфейсу.Мне не очень нравится этот подход, хотя в большинстве случаев.
Последнее решение ... Родитель этих двух хранилищ может предоставлять представления, использующие как пользовательский интерфейс, так и данные.Хотя это может привести к раздутой модели. Ни одно из этих решений не является идеальным, поэтому мне любопытно посмотреть, какие еще ответы появятся.