Mobx-реагировать на обновление до версии 5, больше не создавать массив в качестве итератора - PullRequest
0 голосов
/ 07 января 2019

Следующий скрипт работал нормально на mobx 3.5.1 и mobx-реагировать 4.4.1

this.filters = observable.map();
this.charges = observable([]);
....
...

     this.filteredCharges = computed(() => this.charges.filter(
          charge => !this.filters.keys().some(
            columnName => charge[columnName].toString().toLowerCase()
              .indexOf(this.filters.get(columnName).toLowerCase()) === -1,
          ),
        ));

Только что сделал обновление до mobx 5.6.0 и mobx-реагировать 5.3.6

и начать получать ошибку

TypeError: _this.filters.keys(...).some is not a function

enter image description here

После прочтения это имеет смысл.

Все итерации больше не создают массив как итератор, а только реальный итератор, чтобы быть более тесно связаны с официальными спецификациями. Так ранее observableMap.values ​​() возвращал массив и итератор, но теперь он вернет только итератор. Так ты больше не можешь делать observableMap.values ​​(). карта (п). Вместо этого используйте Array.from (observableMap.values ​​()). Map (fn) или mobx.values ​​(observableMap) .map (п). Затрагиваемые итераторы: 1. итератор по умолчанию для наблюдаемых массивов. 2. Итератор по умолчанию для наблюдаемые карты. observableMap.entries (), observableMap.keys () и observableMap.values ​​().

https://github.com/mobxjs/mobx/wiki/Migrating-from-mobx-3-to-mobx-4

Вопрос в том, как эффективно изменить вышеуказанный скрипт, чтобы он работал с обновить версию mobx.

1 Ответ

0 голосов
/ 16 января 2019

Я уверен, что был бы лучший способ исправить это, это один из способов сделать это.

 import { observable, computed, toJS } from 'mobx';

    this.filteredCharges = computed(() => this.charges
      .filter(charge => !Object.keys(toJS(this.filters))
        .some(columnName => charge[columnName].toString().toLowerCase()
          .indexOf(((typeof this.filters.get(columnName) === 'object') ?
            this.filters.get(columnName).value :
            this.filters.get(columnName)).toLowerCase()) === -1)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...