mobx判断observable中值类型是数组还是对象

在使用mobx过程中,需要判断observable中的值的类型是否是数组,然后有了如下写法:

Array.isArray(this.props.defaultStore.result)

结果是:
无论result里面是不是数组,表达式都返回false。。
这里写图片描述

查看了一下官方文档,发现官方文档里面有这么一段话

请记住无论如何 Array.isArray(observable([])) 都将返回 false ,所以无论何时当你需要传递
observable 数组到外部库时,通过使用 array.slice() 在 observable
数组传递给外部库或者内置方法前创建一份浅拷贝(无论如何这都是最佳实践)总会是一个好主意。
换句话说,Array.isArray(observable([]).slice()) 会返回 true。

所以,将上面的那句判断改写了一下:

Array.isArray(this.props.defaultStore.result.slice())

这下结果是这样:
这里写图片描述

看似没有问题,但是result的值还可能是object类型的,如果是object类型的便会报错:

这里写图片描述

我找了好长时间,最后发现原生mobx中带有一个函数叫isObservableArray(),如果是数组,则返回true,非数组就返回false,达到了我预期要实现的效果~

这里写图片描述
这里写图片描述

另外,我还查到了一个mobx的工具包mobx-utils里面有下面几个方法也可以使用,但是我个人使用时报错'mobx' does not contain an export named '$mobx'.,已经提了issues,解决了之后再来补充~

isObservableObject|Array|Map 用法: isObservableObject(thing),isObservableArray(thing), isObservableMap(thing). 如果匹配就返回 true 。
isArrayLike 用法: isArrayLike(thing). 如果传入的 thing 是一个JS数组或可观察的Mobx数组,则返回true 。 这通常作为一个快捷用法。注意可观察的数组可以通过 .slice() 转变成真正的JS数组。

PS:mobx中文文档-API概述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值