StencilJS - 更新导致整个组件重新渲染的状态

Posted

技术标签:

【中文标题】StencilJS - 更新导致整个组件重新渲染的状态【英文标题】:StencilJS - Updating the state causing whole component to re-render 【发布时间】:2020-11-03 10:10:36 【问题描述】:

在 StencilJS 中,我试图仅重新渲染状态的更新值。但是每次,当值更新时,整个组件都会重新渲染。有什么办法可以避免这种情况吗?

下面是代码:

@State() visible = true 

handleRetryClick = () => 
  this.visible = false;
;

render() 
      return (
        <div class=this.visible ? "modal-wrapper" : "modal-close">
          <div class="modal">
            <div class="modal-container">
              <div class="title">this.status</div>
              <div class="button-container">
                <button class="retry" onClick=this.handleRetryClick>this.modalButtonLabel</button>
              </div>
            </div>
          </div>
        </div>
      );
    

【问题讨论】:

【参考方案1】:

状态修饰属性的目的是,当它的值改变时,组件会重新渲染。见https://stenciljs.com/docs/state:

@State() 属性的任何更改都会导致再次调用组件渲染函数。

我不能 100% 确定您想要实现什么,但如果您担心组件中的所有元素都会被浏览器重新绘制,那么情况并非如此。 Stencil 的运行时使用虚拟 DOM,即。 e.当组件重新渲染时,它会比较前一个和新的 DOM 节点并生成一个 diff,只有有差异的元素才会在真实的 DOM 中被修改。

【讨论】:

以上是关于StencilJS - 更新导致整个组件重新渲染的状态的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NextJS 中更新 <Image /> 标签的 src 而无需重新渲染整个组件

使用 setInterval 时如何防止 React 重新渲染整个组件

如何使用 TSX 使 StencilJS 组件在没有组件标签的情况下呈现?

状态更新时组件不重新渲染

从组件中的 useState 多次调用 state updater 会导致多次重新渲染

如何在反应中限制经常重新渲染的组件