Reactjs 通过数组的MobX@observable来反应PropTypes.array的组件道具

Reactjs 通过数组的MobX@observable来反应PropTypes.array的组件道具,reactjs,mobx,mobx-react,Reactjs,Mobx,Mobx React,因此,我在我的应用程序中使用了一个vanilla React UI组件库和MobX作为状态管理。当我有一个可观察的数组作为数据,并且我想将它从我的组件(它是一个mobx reactobserver)传递到UI库的组件(它的道具是PropTypes.array)时,组件会拒绝它,说我的可观察数组是一个对象,而不是数组 //我的商店 班级商店{ @可观测数据=[…]; } //我的组件 @注入('存储') @观察者 类MyComponent扩展了React.Component{ ... render

因此,我在我的应用程序中使用了一个vanilla React UI组件库和MobX作为状态管理。当我有一个可观察的数组作为数据,并且我想将它从我的组件(它是一个
mobx react
observer
)传递到UI库的组件(它的道具是
PropTypes.array
)时,组件会拒绝它,说我的可观察数组是一个对象,而不是数组

//我的商店
班级商店{
@可观测数据=[…];
}
//我的组件
@注入('存储')
@观察者
类MyComponent扩展了React.Component{
...
render(){
const{store}=this.props;
返回
}
}
//图书馆的组成部分
类LibComponent扩展了React.Component{
静态类型={
数据:PropTypes.array,
....
}
}

我在mobx上读到过关于使用
toJS
的类似文章,但是有没有其他方法可以解决这个问题?因为我不是UI库的所有者,所以我不能添加问题中提到的
mobx react
包中作为答案的PropTypes验证。UI库是否会以
toJS
作为其道具的输入来响应更改?

mobx react附带了它自己的
道具类型,您可以使用它:

这是因为mobx数组实际上是一个对象

文件规定,无论何时发生像您这样的情况,数据都应作为

data.slice()

以便将其转换为普通数组。由于所讨论的库很可能也缺少Observator装饰程序,我认为即使您将observable与其反应性质一起传递,它也不会工作。因此,您应该将其作为非反应性数据处理,或者使用库来满足此需求。

我认为没有其他方法。Thx@mweststrate,我确实知道
mobx react
有自己的proptype,但它是用于组件库的。同时,我尝试使用这样的库,它不使用
mobx react
propTypes来验证它的属性,而是使用数组类型的标准
propTypes
。是否存在任何Workaround?库组件可能首先不应该接收可观察对象(除非它们本身就是观察者)。只需在最近的环绕观察者组件中转换为普通数据