
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
写完 ArkTS 代码,点运行,代码就跑起来了。中间发生了什么?ArkTS 源码先被编译工具链编译成方舟字节码(.abc文件),再由 ArkTS 运行时在设备上执行。运行时内部不是一坨代码,而是分成四个子系统各管一摊。这篇就把这四个子系统的职责、它们之间怎么协作、以及解释器/AOT/JIT 三种执行模式的关系讲清楚。
先开 TS 严格模式再迁。在 TS 项目里把配上,能过的代码迁到 ArkTS 就轻松大半。过不了的部分就是真正要改的。别直接拿松散的 TS 代码往 ArkTS 塞,报错会多到劝退。解构赋值是最容易踩的坑。TS 里太常见了,迁到 ArkTS 全得改。批量替换可以用正则,但复杂解构(嵌套、默认值、rest)得手动改。别指望 structural typing 帮你省代码。TS 里两个类结构一样就能互相
别把 ArkTS 当 TS 写。语法像不代表习惯能照搬。ArkTS 的类型约束更严,any不能用,对象字面量要标类型,解构赋值不支持。从 TS 项目迁过来要先过类型检查这一关。状态管理装饰器是 ArkTS 的核心。写 HarmonyOS 应用,@State@Prop@Link这套机制要吃透。它不是可选的语法糖,而是 ArkUI 刷新 UI 的基础。理解了状态变量的依赖追踪,才能写出性能好的组件。并
API定位用途FrameNode声明式组件的底层节点在声明式外获取、操作组件节点,实现动态增删RenderNode渲染节点自定义绘制,绕过组件直接操作渲染属性构建节点把 Builder 内容挂到任意位置,动态插入 UIRenderNode@Entry@Component// 渲染命令:绘制一个圆形});build() {// RenderNode 挂载到组件上显示Stack() {}RenderN
最基础的封装用@Componentbuild()// 定义一个可复用的"评分条"组件@Component// 评分,0-5build() {Row() {// 小于等于 score 的星是实心的'★' : '☆')// 使用@Entry@Componentbuild() {RatingBar({ score: 4 }) // 4 星RatingBar({ score: 5, maxScore: 1
手势会拦截组件默认行为。给组件加了gesture可能影响其默认手势(如列表的滚动)。需要时用让手势优先,或用并行。拖动注意坐标累积。PanGesture的是单次增量,要累加到@State上。直接赋值会跳动不跟手。组合手势用对模式。并行、顺序、互斥三种模式语义完全不同,用错模式手势会互相冲突,出现"怎么都不触发"或"同时触发"的奇怪现象。触摸和手势别叠加混用。同一组件既用onTouch又用gestu
属性动画管的是"值怎么变",转场动画管的是"组件怎么出现、怎么消失"。元素插入界面、删除界面、页面之间切换,都需要转场来避免生硬的瞬间跳变。ArkUI 的转场分两类:组件转场(组件出现和消失)和页面转场(页面之间切换)。
静态界面能用,但缺了动画的过渡会显得生硬。ArkUI 提供了从简单到复杂的动画能力:属性动画、显式动画、路径动画,以及组件内置动画。这篇把常用动画类型讲清楚。
区分数据生命周期再选型。页面内临时数据用@State,组件树内共享用@Provide@Consume,全局共享用AppStorage,要持久化再加。别所有数据都往 AppStorage 里塞。的 key 要统一管理。持久化 key 散落各处容易冲突,建议集中定义常量。同步引用时注意 type。的类型要和声明一致,类型对不上会有隐式转换问题。持久化数据只存可序列化的。存的是可序列化数据,函数、回调、
子组件改的是自己那份,父组件不知道。适合"父组件的数据子组件只读展示,子组件可以基于它做本地调整"的场景。短期可以用方式 2 快速解决,长期和团队规范应该用方式 1,否则代码里到处是别扭的整体替换。是组件自己的状态,只有声明它的组件能读取和修改。它是所有状态管理的起点。嵌套对象改属性不刷新是状态管理里最隐蔽的问题之一。反过来讲,如果子组件需要改父组件的数据,却用了。,那是个 bug——子组件改了父







