1

我有一个 Stencil 组件,其中包含一个 not-Prop 成员变量:private _zIndex。这个变量的值可以通过调用 a 来设置,Method() setZIndex( zIndex : number );或者当组件在内部做它的事情时它可以改变。我需要一种从外部获取此变量当前值的方法。我尝试创建一个 Method(),它只是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 在其值更改时不强制重新渲染?
4

1 回答 1

0

1 - Stencil@Method预计是异步的。这里有这个决定的一些理由:https ://stenciljs.com/docs/methods

componentWillUpdate()2 - 您可以使用生命周期方法确定何时需要重新渲染组件: https ://stenciljs.com/docs/component-lifecycle#rendering-state

为了防止_zIndex触发重新渲染,您需要存储以前的值,并将其与当前值进行比较:

componentWillUpdate() {
  if (this._zIndex !== this.cachedZindex) {
    return false;
  }
  return true;
}
于 2018-12-19T04:02:11.127 回答