Mobx Noob здесь.У меня есть ES6 Map
, который отображает name -> things
.
Пример:
{
bob: ['pencil', 'table', 'car'],
jane: ['laptop', 'pencil'],
adam: ['car', 'dog', 'house']
}
У меня есть @computed
Map
, полученный из первого, который отображает thing -> names
Пример:
{
pencil: ['bob', 'jane'],
table: ['bob'],
car: ['bob', 'adam'],
laptop: ['jane'],
dog: ['adam']
}
Вот деривационная функция.
@computed get thingToNames () {
const thingToNames = new Map()
for (const [name, things] of this.nameToThings.entries()) {
for (const thing of things) {
if (!thingToNames.has(thing)) {
thingToNames.set(thing, new Set())
}
thingToNames.get(thing).add(name)
}
}
return thingToNames
}
В любое время name -> things
видоизменяется, thing -> names
будет пересчитываться, верно?Если у меня есть миллион names
, и один thing
удаляется из массива things
, потребуется еще как минимум миллион операций для пересчета thing -> names
.Если name -> things
часто видоизменяется, я могу только представить, насколько ужасной будет производительность для пересчета thing -> names
.
. Я мог бы вручную поддерживать структуру данных thing -> names
, но это противоречит мантре Мобса, гдевсе, что может быть выведено, должно быть получено.Итак, как мне эффективно поддерживать thing -> names
способ MOBX?