Mobx: создать функцию обновления атомарного хранилища?

Вопрос про React Mobx. (хотя я думаю, что это общее для любой библиотеки хранилища реакции) Есть ли способ создать функцию обновления атомарного хранилища, не вызывая рендеринга компонентов во время обновления хранилища?

Проблема, с которой я столкнулся, заключается в следующем:

// store.js
class Store {
  constructor() {
    extendObservable(this, {
      array: [1, 2],
      i: 1
    },

    get current_element() {
      return this.array[this.i];
    }
  }

  update(array, i) {
    this.array = array;
    this.i = i;
  }
}


component.js
// ...
render() {
  return <div>store.current_element</div>
}

Теперь, когда я вызываю store.update([0], 0), я получаю ошибку при выходе индекса за пределы. Причина в том, что внутри функции store.update() после выполнения первой строки (this.array = array;) запускается отрисовка компонента. Таким образом, компонент пытается ссылаться на индекс 1 массива [0], что вызывает ошибку индекса за пределами диапазона. Я хочу избежать этого и запускать рендеринг компонентов только после выполнения всей функции store.update().

Как я мог этого добиться?


person Keven Wang    schedule 26.02.2018    source источник


Ответы (1)


Когда вы обновляете наблюдаемое, вы должны делать это с помощью действия. Например

@action setFirstName = firstName => (this.firstName = firstName);
@action setLastName = lastName => (this.lastName = lastName);

Но не фанат мобкса :)

person mrbarletta    schedule 27.02.2018