javascript - 将数组与可观察的 MobX 可观察数组进行比较
问题描述
我的 stores/index.js 中有一个可观察的数组,如下所示:
class Store {
@observable order = [];
fetchData = flow(function*() {
try {
const myData = yield backendService.retrieveData();
if (myData.length > 0) {
this.order = myData.map(element => {
return element.id;
});
}
} catch (error) { // error handling }
});
...
}
我在一个组件中使用这个可观察数组来与另一个数组进行比较,如果它们不一样,我将通过一个动作更新可观察数组。
export default
@inject('store')
@observer
class myComponent extends React.Component {
...
_closeModal() {
const newOrder = this.state.data.map(element => {
return element.id;
});
if (toJS(store.order) !== newOrder) {
store.updateOrder(newOrder);
}
}
}
但是两个数组的比较结果是错误的,即使我不做任何更改,toJS(store.order) !== newOrder
仍然返回true。我不知道我做错了什么,但是当我控制台记录这两个数组时,它们返回完全相同的内容。
解决方案
在 Javascript 中,当两个数组都引用同一个数组时,两个数组是严格相等的。所以[] === []
返回假!因为它们是不同的数组。
您可以通过以下方式更改代码:
if (JSON.stringify(toJS(store.order)) !== JSON.stringify(newOrder))
推荐阅读
- android - 如何从firebase生成片段?
- snowflake-cloud-data-platform - 雪花 SnowPro 认证
- kubernetes - Openshift 使用 REST API 空闲一个服务
- php - 是否可以让 sql 一次执行来自不同用户的一个请求?
- html - 如何在保持绝对定位的同时将子 div 放在父 div 宽度内?
- java - 使 RecyclerView 中的项目可点击时出现问题
- c# - 我正在运行一个 Web 应用程序并想使用 C# 代码更新我的 SQL Server 用户配置文件数据库,但无论我做什么,我都无法让它工作
- javascript - 移除不同索引处的数组元素
- python - 在 Python 中编写类型函数
- ruby-on-rails - 传递参数行为 - 在验证失败/刷新时丢失参数