сравнивая массив с наблюдаемым массивом MobX - PullRequest
0 голосов
/ 22 апреля 2019

У меня в массиве store / 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. Я не знаю, что я делаю неправильно, но когда я консоль регистрирую два массива, они возвращают абсолютно одинаковое содержимое.

1 Ответ

0 голосов
/ 24 апреля 2019

В Javascript два массива строго равны, когда оба ссылаются на один и тот же массив. Так что [] === [] возвращает ложь! потому что они для разных массивов.

Вы можете изменить свой код следующим образом:

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