Skip to main content
Version: 3.x

迁移到 V3

Brick Next V3 已进入收尾阶段,新的架构主要有以下几个目标:

  • 构件即标准的 Web Components
    • 与框架解耦:灵活性
    • Web Components 最佳实践:可靠性、标准化
    • 构件引用构件:可复用性、可扩展性
    • 存量构件:可移植性
  • 轻框架
    • 专注 Storyboard 解析,而不是提供公共 UI 库和工具库
    • 出色的访问性能
      • 在架构上提供跨构件包的模块复用机制
      • 减小网络传输体积,同时尽可能并发网络请求,包括静态资源和业务数据

为了达成目标,v3 在编排层面做了很多减法,移除了一些废弃的特性,以及一些会导致无法进行性能调优的特性。同时,为了现有微应用能更平滑地迁移到 v3 架构,因此在默认的兼容模式下,有一些特性仍然允许使用,详见下表“兼容”一列标注了 ✔️ 的各项。但注意这些特性在严格模式下无法使用。

移除的特性替代方法兼容
老模板( NT 包)使用自定义模板配合 :forEach 等新提供的控制类节点实现
Route.providers, Route.defineResolvesuseProvider
Resolve.provider, Callback.*.provideruseProvider
Resolve.field使用 Resolve.transform✔️
Route.hybrid, App.layout:console, App.legacy:iframe不再兼容使用 iframe 嵌套老 Console
Route.type != "redirect" 时的 Route.redirect使用 Route.type:redirect 定义重定向
跨层级定义名称重复的有效(即:没有被 if 条件忽略的) Context-
Brick.context统一在路由上定义 Context 或在模板中定义 State✔️
Brick.exports-
Brick.bg不再支持预定义的 providers;如果希望构件不影响 UI 布局,可自行设置 display:none(对于无 UI 的工具类构件应在构件层面实现)
Brick.lifeCycle.useResolves使用 Context 或 State 定义数据
模板的 extraOneWayRefs/mergeProperty/refTransform使用模板的 State 数据
模板的 asVariable, <% TPL.* %>使用模板的 State 数据✔️
动态访问 CTX/STATE: CTX[abc] / STATE[a ? "b" : "c"]使用静态访问:a ? STATE.b : STATE.c
使用 context.replacecontext.load 等接口调用未定义的 CTX/STATE先定义对应的数据
在占位符中访问 CTX: ${CTX.q}使用表达式 <% CTX.q %>
useBrick.transform直接使用 useBrick.properties,也可以引用 DATA✔️
useBrick.properties 整个设置为表达式将属性平铺出来,便于后续做属性可视化编排及静态分析等
Menu.type:brick使用其他方式定义菜单数据
模板 State 默认暴露为该模板对外的属性需要主动声明 expose: true✔️
note

模板的 asVariable<% TPL.* %> 在 v3 兼容模式下,会被转换成 State,因此,注意不能与现有 State 名称重复。

note

模板的 mergeProperty 的使用有待进一步讨论,场景:在 table 中对外暴露部分列配置。