先把结论放在前面:@Composable 函数不是\”普通函数加了注解\”,而是被编译器插件改写过的函数——它把\”描述 UI 的代码\”变成\”向运行时描述树(SnapshotTree)注册一份描述\”,运行时由 Composition 负责组合、状态变化时按需重组。 理解这一点,就理解了 Compose 的各项特性:为什么没有控件引用、为什么重组可以跳过、为什么副作用需要单独声明。
面试官验证 Compose 入门的真实功力有个土办法:聊坑。 默认行为是什么、边界在哪、出错时是什么表现。背资料的人在这里会集体沉默。 所以这篇的重点放在三个必答的坑上。
编译期与运行时的分工
@Composable 函数的处理分两个阶段:
编译期(Compose Compiler Plugin):
- 检查 @Composable 调用只能出现在 @Composable 上下文(这就是\”Composable 函数只能从 Composable 函数调用\”这条限制的来源)
- 生成\”重组作用域\”标记($composer、$changed 标记当前函数依赖了哪些状态)
- 把状态读取位置编译成\”依赖注册\”——val x by state 会被转成\”当前重组作用域订阅了 state
网硕互联帮助中心



![[玩转Spring]盘点 Spring 常用扩展点:BeanFactoryPostProcessor、BeanPostProcessor、@Enable、自动配置到底该用哪个?-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2026/10/20261011164102-6acbbc1e47136-220x150.png)


评论前必须登录!
注册