Skip to content

像前端一样在.NET中简单地使用响应式数据

License

Notifications You must be signed in to change notification settings

SwingCosmic/ReactiveSharp

Repository files navigation

ReactiveSharp

像前端一样在.NET中简单地使用响应式数据。

  • 实现了IObservable<T>,因此可以与Rx.NET配合使用
  • 实现了INotifyPropertyChanged等接口,可以与WPF等传统数据绑定一起工作
  • 支持从.NET Standard 2.1(Unity)到.NET8+,且针对.NET新版本功能做了不同的优化
  • 依赖反射和动态代码的部分较少,可以在.NET Native AOT或者Unity IL2CPP等AOT环境下运行,只有少数方法不能使用。如果使用.NET7+,可以从方法的注解上看出哪些在AOT下会出现问题

重要的类型

  • IReadOnlyRef<T> 表示一个只读的响应式值的引用

  • IRef<T> 表示一个可写入的响应式值的引用

以上类型可以通过创建响应式对象的实例,或者通过RefHelpers的工具方法生成

  • RefHelpers 提供了大量工具方法用于封装现有对象为响应式对象,例如将类的一个属性封装为独立的IRef<T>,使其可以用于创建计算属性

响应式对象

Ref<T>

可读写的响应式对象引用,实现了IRef<T>

相当于vueShallowRef,或者@preact/signalsSignal,对所引用的对象具有浅层响应式

Computed<T>

只读的计算属性引用,仅当依赖变化时才会重新计算,实现了IReadOnlyRef<T>。 计算属性可以依赖任何实现了IReadOnlyRef<T>接口的类型(包括其他计算属性)

相当于vueComputed,但是语法上更接近reactuseMemo

var a = new Ref<int>(1);
var b = new Ref<int>(1);

var c = new Computed<int, int, int>(() => 
{
  return a.Value + b.Value;
}, a, b);

a.Value = 2;

Console.WriteLine(c.Value); // 3

Effect

提供一些方法监听依赖的变更并执行副作用,类似vuewatch。 支持同步和异步的版本

About

像前端一样在.NET中简单地使用响应式数据

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages