Blazor Server应用的Store数据管理:是否有类似Redux的可用方案?
Blazor Server 类 Redux 状态管理方案参考
Blazor 生态有多个成熟的类 Redux 状态管理工具,也可以根据项目复杂度自行实现轻量化方案,具体选择参考如下:
1. 主流第三方方案:Fluxor
Fluxor 是目前 Blazor 生态最流行的、完全遵循 Flux/Redux 设计理念的状态管理库,和 Redux 使用逻辑高度对齐,非常适合有 React+Redux 开发经验的开发者:
- 完整支持 Redux 的核心概念:不可变状态、Action、Reducer、Effect、中间件,学习迁移成本极低
- 原生适配 Blazor Server 的 SignalR 连接机制,默认支持状态隔离,不会出现跨用户连接的状态泄漏问题
- 内置状态变更通知能力,组件订阅对应状态切片后,状态更新会自动触发组件重渲染,无需手动处理
- 配套 DevTools 支持时间旅行调试,和 Redux DevTools 使用体验一致
2. 轻量自研方案:极简类 Redux Store 实现
如果是小型项目不想引入额外第三方依赖,可以自行实现核心的 Redux 能力,核心代码不到100行:
核心实现示例
// 定义不可变状态类型 public record AppState(int UserId, string UserName, bool IsAuthenticated); // 通用Store类 public class ReduxStyleStore<TState> { private TState _currentState; private readonly Func<TState, object, TState> _reducer; public ReduxStyleStore(TState initialState, Func<TState, object, TState> reducer) { _currentState = initialState; _reducer = reducer; } public TState GetState() => _currentState; public void Dispatch(object action) { _currentState = _reducer(_currentState, action); NotifyStateChanged(); } public event Action OnChange; private void NotifyStateChanged() => OnChange?.Invoke(); }
使用注意事项
- Blazor Server 中必须将 Store 注册为 Scoped 生命周期,对应单个用户的连接生命周期,禁止注册为 Singleton 导致所有用户共享状态
- 组件中注入 Store 后,在
OnInitialized生命周期中订阅OnChange事件,触发时调用StateHasChanged即可实现状态同步
3. 其他可选方案
如果项目已经使用 MediatR 做 CQRS 架构,可以选择 Blazor-State,也是遵循 Flux 架构的类 Redux 库,基于 MediatR 派发 Action,和现有技术栈适配度更高。
选型建议
- 中大型项目、团队熟悉 Redux 开发模式:优先选择 Fluxor,生态成熟,社区问题多,踩坑成本低
- 小型项目、对包体积敏感:自研极简 Store 即可覆盖需求
- 现有项目已经集成 MediatR:可以考虑 Blazor-State 做技术栈统一
内容的提问来源于stack exchange,提问作者Baba
相关产品推荐
相关产品推荐

