首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StencilJs/Jsx:在嵌套组件中呈现HTMLElements

StencilJs/Jsx:在嵌套组件中呈现HTMLElements
EN

Stack Overflow用户
提问于 2020-04-24 12:18:41
回答 1查看 1.8K关注 0票数 1

这是我的组成部分:

代码语言:javascript
复制
@Component({
  tag: "my-alert-list",
  styleUrl: "alert-list.scss",
  shadow: true,
})
export class AlertList {
  @State() alertList: object[] = [];

  @Method()
  async appendAlert(
    type: string,
    message: string,
    htmlContent: object,
    canClose: boolean = false,
    closeDelay: number
  ) {
    let alertBoxElement = (
      <my-alert-box
        alert-type={type}
        message={message}
        can-close={canClose}
        close-delay={closeDelay}
        opened
      >
      {htmlContent}
      </my-alert-box>
    );
    this.alertList = [
      ...this.alertList,
      alertBoxElement
    ]
  }


  render() {
    return (
      <Host>
        {this.alertList}
      </Host>
    );
  }
}

appendAlert方法的目的是在警报列表中添加一个新的my-alert-box元素。在同样的情况下,我不想将一个简单的文本传递给my-alert-box,而是一些HTML块。(my-alert-box有一个接收器插槽元素,我验证了它的工作能力)。正如您可以看到的那样,我试图用htmlContent变量来实现这一点,但是如果我这样做,它当然不能工作:

代码语言:javascript
复制
$('#alertlist')[0].appendAlert(type='info',message='', htmlContent=document.createElement('div'))

我收到错误:

作为子级传递的

模具-DEV-模式vNode具有意外类型。确保它使用的是正确的h()函数。空对象也可能是原因,查找成为对象的JSX注释。

你知道我怎么能做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-24 21:45:11

不可能出现这种情况,因为JSX的工作方式不同。您可以将htmlContent作为字符串传递,并在my-alert-box上使用innerHTML,但这很危险(XSS)。

离子的ion-alertmessage的支柱具有相同的限制。请参阅https://ionicframework.com/docs/api/alert#properties,它有指向https://ionicframework.com/docs/techniques/security的链接,在这里他们解释了如何进行一些基本的DOM清理(@ionic/core也是用模板构建的)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61408206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档