Mitosis项目发布:Angular与Stencil组件属性传递优化方案
Mitosis是一个创新的前端框架,它允许开发者编写一次组件代码,然后编译输出到多个框架(如React、Vue、Angular等)。这个工具特别适合需要在不同技术栈中共享组件逻辑的场景,大大提高了代码复用率和开发效率。
属性传递问题的背景
在Angular和Stencil(无DOM隔离模式)框架中,开发者经常会遇到一个令人困扰的问题:当我们在组件上设置诸如class、data-*或aria-*等属性时,这些属性会被渲染到父组件元素上,而不是预期的子元素上。这不仅影响了样式和功能的实现,也违背了开发者的预期行为。
问题示例
假设我们有一个Angular组件:
<my-component class="cool" data-nice="true" aria-label="wow"></my-component>
在DOM中的实际渲染结果却是:
<my-component class="cool" data-nice="true" aria-label="wow">
<button class="my-component">My Component</button>
</my-component>
而我们期望的效果是这些属性应该传递到内部的button元素上:
<my-component>
<button class="my-component cool" data-nice="true" aria-label="wow">
My Component
</button>
</my-component>
Mitosis的解决方案
Mitosis在最新版本中引入了attributePassing功能,提供了两种方式来启用属性传递机制:
1. 通过组件元数据配置
在组件文件中,我们可以使用useMetadata钩子来启用属性传递:
useMetadata({
attributePassing: {
enabled: true,
// customRef: "_myRef" // 可选的自定义引用名称
},
});
2. 通过构建配置文件
在项目的mitosis.config.cjs配置文件中,我们可以全局启用这一功能:
module.exports = {
attributePassing: {
enabled: true,
// customRef: "_myRef" // 可选的自定义引用名称
},
};
技术实现细节
当启用attributePassing功能时,Mitosis会在根元素上自动添加一个名为_root的引用(ref)。这个引用用于与DOM元素交互,实现属性的正确传递。如果开发者已经在根元素上使用了自定义的引用,可以通过customRef选项指定引用名称,避免冲突。
使用建议
-
渐进式采用:可以先在单个组件中测试这一功能,确认无误后再全局启用。
-
自定义引用:如果组件逻辑中已经使用了根元素的引用,务必设置
customRef选项以避免引用冲突。 -
样式隔离:注意启用属性传递后,外部传入的class会与组件内部样式合并,需要做好样式隔离和命名规范。
-
测试覆盖:特别是对于动态属性传递的场景,建议增加相应的测试用例。
总结
Mitosis的这一更新解决了Angular和Stencil框架中长期存在的属性传递问题,使开发者能够更精确地控制属性的渲染位置。通过灵活的配置选项,这一功能可以适应各种复杂的应用场景,同时保持与现有代码的兼容性。对于需要在多个框架中共享组件的项目来说,这无疑是一个重要的改进。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00