将数组与可观察的MobX可观察数组进行比较

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将数组与可观察的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中,当两个数组都引用相同的数组时,两个数组严格相等。所以[] === []返回false!因为他们是不同的阵列。

您可以通过以下方式更改代码:

if (JSON.stringify(toJS(store.order)) !== JSON.stringify(newOrder))

以上是关于将数组与可观察的MobX可观察数组进行比较的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift 可观察数组排序

用 mobx 反应 Sortable JS

如何使剔除可观察数组中的对象属性可观察?

可观察的数组到数组(Rxjs)

knockoutjs 可观察对象绑定的可观察数组

如何根据从另一个可观察对象返回的数组中的键创建可观察/ http请求数组