Как получить параметр компонента Stencil синхронно и установить его без перерисовки компонента? - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть компонент Stencil, который содержит переменную not-Prop: private _zIndex.Значение этой переменной можно установить, вызвав Method() setZIndex( zIndex : number );, или оно может измениться, когда компонент выполнит свою работу внутренне.Мне нужен способ получить текущее значение этой переменной извне.Я попытался создать метод (), который просто return this._zIndex.Проблема в том, что этот метод должен быть асинхронным, так как я получаю предупреждение, если это не так:

External @Method() getZIndex() should return a Promise or void.  
Consider prefixing the method with async,  Next minor release will error.  

Я не хочу, чтобы функция getZIndex () была асинхронной, поэтому другой вариант - сделать Prop( { mutable: true } ) _zIndex.Если я это сделаю, тогда я смогу установить / получить значение переменной, однако теперь, когда я устанавливаю значение переменной, это заставляет трафарет перезапустить мой компонент.Это может быть медленно, потому что мой компонент большой и содержит много вложенных компонентов.

Есть ли способ, которым я могу либо:

  • получить значение закрытой переменной извне, не будучисделано асинхронно?

или

  • Есть ли способ заставить Prop не форсировать повторный рендеринг при изменении его значения?

1 Ответ

0 голосов
/ 19 декабря 2018

1 - Трафарет @Method ожидается асинхронным.Вот некоторые обоснования для этого решения: https://stenciljs.com/docs/methods

2 - Вы можете определить, когда вы хотите, чтобы компонент повторно визуализировал, используя метод жизненного цикла componentWillUpdate(): https://stenciljs.com/docs/component-lifecycle#rendering-state

Чтобы _zIndex не вызывал повторную визуализацию, вы должны сохранить предыдущее значение и сравнить его с текущим:

componentWillUpdate() {
  if (this._zIndex !== this.cachedZindex) {
    return false;
  }
  return true;
}
...