如何同步获取Stencil组件参数并进行设置而不重新渲染该组件?

时间:2018-12-18 14:06:09

标签: typescript asynchronous prop stenciljs

我有一个模板组件,其中包含一个非Prop成员变量:private _zIndex。该变量的值可以通过调用Method() setZIndex( zIndex : number );来设置,也可以在组件内部执行其操作时更改。我需要一种从外部获取此变量的当前值的方法。我尝试创建仅return this._zIndex的Method()。问题在于此方法必须是异步的,因为如果不是,则会收到警告:

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 :(得分:0)

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;
}