信号
为原始数据类型收集不可改变的状态容器.
关于
一种思考Evicion操作的方法是作为可相容的组件 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}Ayncrony. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我就是这个意思 它们在概念上与React组件相似,因为它们是 用于引用其他函数的函数。 和 React 组件树一样, 效果 操作被安排在一个操作树上。 反应组件设计为 使DOM更容易在Effection操作设计的地方组成 比较容易组成同步。 因为他们的模样,它应该成为 没有猜测他们会分享国家管理模式。 反应上下文 效果背景就是一个例子,但好处是 单向数据流动 提供构成是另一种.
在Redux等工具中,Flux模式是“经典”方式 在React应用程序中执行一个方向数据。 这些年来 在各种UI中执行的信号 框架。 JavaScript生态系统中的信号设计假设它们 将纳入一些UI框架。 效果提供必要的 具有强大而简单的执行信号的组件 需要一个UI框架.
包含在这个软件包中
此包中包含的信号集依赖于 Effection 的信号
界面,以提供一些操作的不可变值流。 每个信号
包含 set, (中文(简体) ), update 财务报告和审定财务报表 valueOf 方法。 。 。 每个数据类型还包括:
该数据类型的原始版本提供的方法。 譬如说,
矩阵符号提供 push 财务报告和审定财务报表 shift设定提供 difference我们
不执行所有的方法, 大部分是因为不需要所有的方法.
如果你需要我们没有执行的方法... ...但是它可以在..
发作类型,请创建PR. 如果你需要别的东西,使用 update
方法.
布尔信号
布尔信号提供了布尔值的流. 您可以设置值 这将导致将新值发送到流中.
import { each, run, spawn } from "effection";
import { createBooleanSignal } from "@effectionx/signals";
await run(function* () {
const boolean = yield* createBooleanSignal(true);
yield* spawn(function* () {
for (const update of yield* each(boolean)) {
console.log(update);
yield* each.next();
}
});
boolean.set(false); // this will send false to the stream
boolean.set(true); // this will send true to the stream
boolean.set(true); // this won't send anything since the value hasn't changed
});
以 Boolean 信号在操作中为例,请检查 水龙头
阵列信号
阵列信号提供了阵列值的流. 值为 被认为是不可改变的 - 您不应该修改通过 ,相反,在信号上引用方法导致发送新的值.
import { each, run, spawn } from "effection";
import { createArraySignal } from "@effectionx/signals";
await run(function* () {
const array = yield* createArraySignal<number>([]);
yield* spawn(function* () {
for (const update of yield* each(array)) {
console.log(update);
yield* each.next();
}
});
array.push(1, 2, 3); // this will be a single update
});
以矩阵符号为例,请检查 阀门 财务报告和审定财务报表 批次 溪流帮助器.
帮助者
实值
is 帮助返回当流值完成的操作
与上游相匹配。 需要等待信号才能进入
具体状态。 一些常用例正在等待一个数组到达
给定长度或布尔信号变为真或假.
is 观察信号的当前状态 以及任何匹配的变化,所以它
完成确定性 生产者不必 yield 或者说 sleep
发表前。 它在检查当前数据之前先确定订阅日期
值,所以一个匹配的更新,当它开始等待的时候, 土地就永远不会
输了.
import { run, spawn } from "effection";
import { createBooleanSignal, is } from "@effectionx/signals";
await run(function* () {
const open = yield* createBooleanSignal(false);
yield* spawn(function* () {
yield* is(open, (open) => open === true);
console.log("floodgates are open!");
});
// No sleep or yield needed before publishing.
open.set(true);
});