我从Mobx那里得到了警告信息。
[mobx.array]试图读取超出界限(0)的数组索引(0)。请先检查长度。超出界限的索引将不会被MobX跟踪
@observable checks = {
deviceType: ['phone','laptop', ...],
deviceTypeChecks: [],
...
}
@action
selectAllChecks = (target, type) => {
const targetChecks = []
if (this.checks[target].length !== this.checks[type].length) {
this.checks[target].forEach(el => targetChecks.push(el))
}
this.checks[type] = targetChecks
}
我怎样才能删除那个警告呢?不过,这个代码没有问题。它工作得很好。
我通过onChange函数使用selectAllChecks
函数。
const {
deviceType,
deviceTypeChecks
} = this.props.store.checks
<label className="mr10">
<input
type="checkbox"
checked={deviceType.length === deviceTypeChecks.length}
onChange={() =>
selectAllChecks('deviceType', 'deviceTypeChecks')
}
/>
<span>All device type</span>
</label>
我必须为IE的4个版本。
"mobx": "^4.1.0",
"mobx-react": "^5.2.6",
有没有别的办法?
5条答案
按热度按时间zhte4eai1#
与平面列表的另一个冲突是,当数据数组长度为3、5或7等时,使用的是 numColumns={2}。更改为 numColumns={1} 警告错误已解决。但此问题的解决方案使用Javascriptslice方法
2w3rbyxf2#
Mobx可以使dynamic objects可观测(它事先不知道)
但是如果你在客户端调试器中查看这个对象(console.log(myObject)),你会发现它不是一个普通的JS对象,而是Mobx的某个代理对象。
为了避免这种警告,你可以使用toJS method,它将一个(可观察的)对象转换成一个javascript结构。
例如,以下代码返回警告
您可以使用以下方法解决此问题:
8ftvxx2r3#
如果将
@action
更改为以下内容,会发生什么情况:是否仍显示
mobx out of bounds
错误?a6b3iqyw4#
您似乎正在尝试访问一个可观察数组的元素,而该元素不存在。您有两个可观察数组,其中一个
deviceTypeChecks
没有元素。但是,代码看起来没有问题。代码中是否有其他地方正在访问此数组?n3h0vuf25#
我今天遇到了同样的问题,在检查了所有的东西之后,我发现问题是我定义了错误的数据类型,所以mobx无法正常读取它。
定义的数组错误:
在我把它换成正确的类型后,它工作得很好