https://github.com/swingcosmic/reactivesharp
像前端一样在.NET中简单地使用响应式数据
https://github.com/swingcosmic/reactivesharp
aot-compatible csharp dotnet reactive-programming
Last synced: 3 months ago
JSON representation
像前端一样在.NET中简单地使用响应式数据
- Host: GitHub
- URL: https://github.com/swingcosmic/reactivesharp
- Owner: SwingCosmic
- License: mit
- Created: 2024-05-02T15:50:27.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2024-07-14T13:52:36.000Z (about 2 years ago)
- Last Synced: 2025-03-22T07:33:01.813Z (over 1 year ago)
- Topics: aot-compatible, csharp, dotnet, reactive-programming
- Language: C#
- Homepage:
- Size: 25.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# ReactiveSharp
像前端一样在.NET中简单地使用响应式数据。
* 实现了`IObservable`,因此可以与`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`,使其可以用于创建计算属性
## 响应式对象
### Ref<T>
可读写的响应式对象引用,实现了`IRef`
相当于`vue`的`ShallowRef`,或者`@preact/signals`的`Signal`,对所引用的对象具有浅层响应式
### Computed<T>
只读的计算属性引用,仅当依赖变化时才会重新计算,实现了`IReadOnlyRef`。
计算属性可以依赖任何实现了`IReadOnlyRef`接口的类型(包括其他计算属性)
相当于`vue`的`Computed`,但是语法上更接近`react`的`useMemo`
```csharp
var a = new Ref(1);
var b = new Ref(1);
var c = new Computed(() =>
{
return a.Value + b.Value;
}, a, b);
a.Value = 2;
Console.WriteLine(c.Value); // 3
```
### Effect
提供一些方法监听依赖的变更并执行副作用,类似`vue`的`watch`。
支持同步和异步的版本