Experimental Compiler Demo
Compiled setup regions
入口、中段和末段 region 首次可达时分别初始化;离开后缓存保留,compiled signal 与普通 Rue ref 继续直接驱动控制流 DOM。
region setup 次数:入口 1 / 中段 0 / 末段 0
A initial · 首次挂载
先修改 A,再切换到 B/C 并修改,最后返回旧分支:状态文本会保留,顶部每个 region 的 setup 次数仍为 1。
Supported Shape
const CompiledBranchCard = props => {
const entrySetupId = beginRegion('entry')
const entryPrefix = 'entry'
const entrySuffix = 'state'
const bumpEntryValue = value => value + 1
const entryCompiled = compiledSignal(1)
const entryRef = ref(10)
let entryStep = 0
regionControls[0] = () => {
if (entryStep === 0) entryCompiled.update(bumpEntryValue)
else entryRef.value += 10
entryStep += 1
}
if (props.mode === 0 && entryCompiled.get() === 1 && entryRef.value === 10)
return <div>A initial · {props.label}</div>
if (props.mode === 0 && entryRef.value === 10)
return <div>A compiled signal changed · {props.label}</div>
if (props.mode === 0) return <div>A Rue ref changed · {props.label}</div>
const middleSetupId = beginRegion('middle')
const hello = 'hello'
const middleSuffix = 'region'
function bumpMiddleValue(value) { return value + 1 }
const middleCompiled = compiledSignal(2)
const middleRef = ref(20)
regionControls[1] = () => {
middleCompiled.update(bumpMiddleValue)
middleRef.value += 10
}
if (props.mode === 1 && middleCompiled.get() === 2 && middleRef.value === 20)
return <section>B initial · {props.label}</section>
if (props.mode === 1) return <section>B state retained · {props.label}</section>
const finalSetupId = beginRegion('final')
const world = 'world'
const finalSuffix = 'region'
const bumpFinalValue = value => value + 1
const finalCompiled = compiledSignal(3)
const finalRef = ref(30)
regionControls[2] = () => {
finalCompiled.update(bumpFinalValue)
finalRef.value += 10
}
if (finalCompiled.get() === 3 && finalRef.value === 30)
return <article>C initial · {props.label}</article>
return <article>C state retained · {props.label}</article>
}当前边界:仅分析顶层 early-return 可达区域;循环、switch、try/catch 等任意嵌套区域分析不在本示例支持范围内。依赖 props 的实时派生表达式不会冻结为 setup 快照。