Reactjs 通过数组的MobX@observable来反应PropTypes.array的组件道具
因此,我在我的应用程序中使用了一个vanilla React UI组件库和MobX作为状态管理。当我有一个可观察的数组作为数据,并且我想将它从我的组件(它是一个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
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?库组件可能首先不应该接收可观察对象(除非它们本身就是观察者)。只需在最近的环绕观察者组件中转换为普通数据