自定义元素多次渲染

问题描述 投票:-1回答:1

我目前在使用自定义元素时遇到问题,我正在构建一些自定义内容以在电子商务网站上发布,而我的一个自定义元素正在多次重新呈现自身。

window.initDealBadge = function(customer) {
class DealBadgeCustomElement extends HTMLElement {

    constructor(){
      super();
    }

    connectedCallback(){
      console.log("ELEMENT ADDED TO PAGE")
      const mountPoint = document.createElement('span');

      this.appendChild(mountPoint);

      const attrs = [].reduce.call(this.attributes, (memo, attr) => {
            memo[attr.name] = attr.value;
            return memo;
        }, {});
        const data = Object.assign({}, attrs);

      ReactDOM.render(<DealBadge customer={customer} id={data.id}/>, mountPoint);
    }
  }
customElements.define('deal-badge', DealBadgeCustomElement);

}

这是我第一次使用Custom元素,之前有人遇到过此问题吗?

谢谢

reactjs web-component custom-element
1个回答
0
投票

我设法使其正常运行,多次调用ConnectedCallback。我添加了一个计数以确保它只能运行一次。

window.initDealBadge = function(customer) {
class DealBadgeCustomElement extends HTMLElement {

    constructor(){
      super();
      this.count = 0
    }

    connectedCallback(){
      if(this.count === 0){
        this.count += 1
        console.log("ELEMENT ADDED TO PAGE")
        const mountPoint = document.createElement('span');

        this.appendChild(mountPoint);

        const attrs = [].reduce.call(this.attributes, (memo, attr) => {
              memo[attr.name] = attr.value;
              return memo;
          }, {});
          const data = Object.assign({}, attrs);

        ReactDOM.render(<DealBadge customer={customer} id={data.id}/>, mountPoint);
      }
    }
  }
customElements.define('deal-badge', DealBadgeCustomElement);};
© www.soinside.com 2019 - 2024. All rights reserved.