Blazor Server中CascadingValue IsFixed特性的行为疑问
Blazor Server 中带 IsFixed 的 CascadingValue 行为原理解释
核心机制:IsFixed 的作用
IsFixed="true" 会将级联值标记为固定不可变,Blazor 框架默认认为这个值不会发生变化,因此:
- 子组件只会在首次初始化渲染时读取一次该值
- 后续父组件更新这个值时,框架不会主动通知接收该级联值的子组件重新读取或渲染
两种场景的行为拆解
场景1:同时存在两个 CascadingValue(一个带 IsFixed,一个不带)
- 首次点击按钮:
- 父组件更新两个级联值的数值,触发自身重新渲染
- 不带
IsFixed的级联值会通知子组件重新渲染,但子组件在这次渲染中,因为IsFixed标记,不会主动读取该级联值的新值,所以显示的还是旧值
- 第二次及之后点击:
- 父组件再次更新值并触发自身渲染,不带
IsFixed的级联值再次触发子组件渲染 - 此时子组件在渲染流程中,会被动检查到父组件中该级联值的内存数据已经变化,加上渲染触发信号,会读取到新值并更新显示
- 本质是不带
IsFixed的级联值触发了子组件的重复渲染,间接让IsFixed的级联值在后续渲染周期中被重新读取
- 父组件再次更新值并触发自身渲染,不带
场景2:单独使用带 IsFixed 的 CascadingValue
- 父组件更新值后,因为
IsFixed=true,框架不会向子组件发送任何更新通知 - 子组件没有收到任何重新渲染的触发信号,因此不会执行重新渲染逻辑,自然也不会读取父组件更新后的新值,所以完全不更新
内容的提问来源于stack exchange,提问作者Naveen
相关产品推荐
相关产品推荐

