Я использую компонент React Virtualized <Autosizer>
и убедился, что его удаление приводит к исчезновению неожиданного поведения.
https://github.com/bvaughn/react-virtualized/blob/master/docs/AutoSizer.md
Мой @computed
выглядит просто так:
foo=[];
@computed get filteredCollection() {
return this.foo;
}
Почему я наблюдаю такое поведение? При каких обстоятельствах это значение нет будет кэшироваться mobx и просто возвращаться без вызова функции?
Вызывает неожиданное поведение:
<AutoSizer>
{this.renderTable}
</AutoSizer>
Не вызывает неожиданного поведения:
{this.renderTable({ width: 200, height: 200 })}
(filteredCollection
используется renderTable
)
По всей видимости, это связано с автоматической приостановкой неиспользуемых вычислений. При повторном рендеринге таблицы компонент удаляется, и вычисленное значение на мгновение не используется. Когда он снова станет использоваться, его необходимо снова настроить, что включает в себя вызов функции.
Исправление состоит в том, чтобы убедиться, что вычисленное в это время используется где-то еще, или используйте опцию keepAlive
.