使用MobX与TypeScript时NavViews.test为undefined的问题求助
我编写了如下代码:
export const NavViews = { test: "test1", test2: "test2" } as const;
接着实现了如下MainViewsStore类:
export class MainViewsStore { @computed get isLandingPage() { return this.primaryView === NavViews.test; } }
当调用this._mainViewsStore.isLandingPage时,明明this.primaryView === NavViews.test应该成立,但结果却为false,且发现NavViews.test的值是undefined。我正在使用MobX和TypeScript,请问有人遇到过类似情况吗?
可能的原因及解决方法
模块导入错误
检查NavViews的导入语句,是否误用了默认导入而非命名导入。比如如果写成import NavViews from './xxx',但实际是命名导出export const NavViews,这会导致NavViews指向模块的默认导出(如果没有默认导出则为undefined),自然NavViews.test也会是undefined。确保导入语句是import { NavViews } from './xxx',和导出方式匹配。循环依赖问题
如果MainViewsStore所在模块和NavViews所在模块存在互相导入的情况,可能会导致模块加载时NavViews还未完成初始化,出现属性为undefined的情况。解决办法是把NavViews这类常量抽离到一个独立的、无循环依赖的模块中,再让需要的模块去导入这个独立模块。状态初始化问题
确认MainViewsStore中的primaryView是否正确初始化。虽然你提到NavViews.test是undefined,但也有可能是primaryView的赋值和预期不符,比如误赋值为'test'而非'test1',不过这个是次要排查点,优先解决NavViews的undefined问题。
内容的提问来源于stack exchange,提问作者Rue Vitale

