Mobx noob在这里。我有一个映射Map
的ES6 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
数据结构,但这违背了mobx的口头禅,在这种口头上,任何可以导出的东西都应该被导出。那么如何有效维持thing -> names
的mobx方式呢?