javascript - StencilJs/Jsx:在嵌套组件中渲染 HTMLElements
问题描述
这是我的组件:
@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 变量来实现这一点,但是如果我这样做当然它不起作用:
$('#alertlist')[0].appendAlert(type='info',message='', htmlContent=document.createElement('div'))
我收到错误:
[STENCIL-DEV-MODE] 作为子节点传递的 vNode 具有意外类型。确保它使用正确的 h() 函数。空对象也可能是原因,寻找成为对象的 JSX 注释。
关于如何实现这一目标的任何想法?
解决方案
这是不可能的,因为 JSX 的工作方式不同。您可以将其htmlContent
作为字符串传递并继续使用innerHTML
,my-alert-box
但这很危险(XSS)。
Ionic与propion-alert
有相同的限制......请参阅https://ionicframework.com/docs/api/alert#properties ,其中包含指向https://ionicframework.com/docs/techniques/security的链接,他们在那里解释他们如何进行一些基本的 DOM 清理(也是用 Stencil 构建的)。message
@ionic/core
推荐阅读
- angular - 带有 Razor 页面的 ASP .Net Core 与 UI 的 Angular
- javascript - 隐藏列时的 CSS Grid 动态大小
- r - 如何使用 selectInput 从 R 中的数据框中选择特定列?
- python - 如何将任何数字四舍五入到最接近的 5 的倍数?
- android - 将文件存储到外部存储需要太多时间
- python - 在 Pandas 数据框中用尽可能少的日期填充缺失的日期值
- python - 不正确的特征向量,但通过 QR 算法与 python 的 numpy 正确的特征值
- amazon-web-services - 多个 AWS 账户承担 IAM 角色以访问 API 网关
- python - Python 脚本未在 docker 容器内执行
- google-bigquery - Bigquery 到 Avro