# @ecopages/signals 中文文档

规范地址：https://npmcn.com/package/%40ecopages/signals/

版本：0\.8\.3
npm 元数据更新时间：2026-11-12T22:59:59.684Z
中文译文更新时间：2026-11-13T06:06:33.224Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40ecopages/signals
原文对照：https://npmcn.com/package/%40ecopages/signals/?lang=original
项目主页：https://github.com/ecopages/radiant/tree/main/packages/signals#readme
源码仓库：https://github.com/ecopages/radiant

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：112 kB，19 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2026-04-12T21:01:43.848Z
- 最新版本发布：2026-11-12T22:59:59.331Z
- 近 30 天下载量：6057（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：58（近 12 个月 58 个）

## 中文简介

基于 TC39 信号提案的可知信号原始

## 安装

```sh
npm install @ecopages/signals
```

也可以使用：`pnpm add @ecopages/signals`、`yarn add @ecopages/signals`、`bun add @ecopages/signals`

## README

# 生态页面信号

`@ecopages/signals` 是一个可独立使用或位于Radiant下方的渲染-不可知信号包.

它的核心模式基于 [TC39 信号提案](https://github.com/tc39/proposal-signals/tree/main),其表面积更小,并且有少数方便的帮助者今天用于应用代码.

公共入境点仍然存在 `index.ts`,而目前的执行工作则在以下重点单元中进行: `src/` 因此核心运行时间,效果,监视器支持,和存储逻辑可以独立地演化.

## 当前范围

该套件目前提供:

-   `State<T>` 可写入值
-   `Computed<T>` 懒惰派生值
-   `currentComputed()` 对于需要主动计算背景的高级派生助手
-   `effect(...)` 反应副作用,并计划重新执行
-   `watch(...)` 以上一个值访问来观察衍生值
-   `untrack(...)` 财务报告和审定财务报表 `peek(...)` 非跟踪读取
-   `subtle.Watcher` 加号 `watched` 财务报告和审定财务报表 `unwatched` 低级无效工作流程的钩子
-   `createStore(...)` 深反应对象和阵列状态
-   `mapItems(...)` 用于对每个项目进行一次映射并在清单中保留时重用其结果的衍生列表
-   `isStore(...)` 用于检测信号后置存储代理
-   `snapshot(...)` 用于实现纯嵌入式数据
-   期间的自动依赖性发现 `Computed` 评价
-   对渲染器或框架适配器的订阅支持

## 源版式

该套装围绕一个稳定的公共管和较小的执行文件进行:

-   `index.ts` 再出口公众API并曝光 `subtle`
-   `src/types.ts` 定义公共合同、选项和低等级符号
-   `src/state.ts` 执行可写 `State` 信号
-   `src/computed.ts` 执行懒惰衍生 `Computed` 信号和主动计算助手
-   `src/effect.ts` 财务报告和审定财务报表 `src/watch.ts` 执行效果安排和衍生价值观察
-   `src/watcher.ts` 执行建议书形状的低级监视器
-   `src/tracking.ts` 包含未跟踪的已读帮助
-   `src/store.ts` 包含深存储代理和快照实现

## 设计位置

这个包是不可知的.

-   它不知道JSX.
-   它不知道Radiant组件.
-   它既作为独立的包件工作,又作为这些包件的下部适配器工作.

```mermaid
flowchart LR
    Set["state.set(value)"] --> Stale["dependent computeds<br/>marked stale"]
    Stale --> Pull["computed.get()<br/>recomputes lazily and caches"]
    Stale --> Notify["subscribers, effects<br/>and watchers notified"]
    Notify --> Adapter["an adapter re-reads and patches,<br/>such as an @ecopages/jsx binding"]
```

计算出它在评估时读取的信号,因此依赖性不需要声明。 在读取之前,任何内容都不会重算,一个订阅的适配器都会被推出新的值来补丁自己的输出.

## TC39 关系

本套件以目前的TC39信号器提案为基础,并围绕下列内容跟踪相同的宽度模型:

-   `State` 财务报告和审定财务报表 `Computed` 信号类
-   基于缓存值的懒于拉重算
-   在计算评价过程中自动发现依赖性
-   可写和计算信号的自定义平等函数
-   未跟踪读取为逃生舱

这不是本提案草案的即时执行.

最好将其理解为其核心语义中的提案相通,但尚未完全与草案表面相兼容.

-   它暴露了方便的帮助者,例如: `effect(...)`, (中文(简体) ), `watch(...)`, (中文(简体) ), `createStore(...)`,以及 `snapshot(...)` 直接说.
-   它现在暴露在手动 `subscribe(...)` 用于适配器和库集成的钩子.
-   它暴露出一个提议形状 `subtle.Watcher` API,同时保留现有的便利助手.
-   内容 `subtle.Watcher` 遵循提议式的再武装行为,其中呼叫 `watch(...)` 重置下一个无效周期的待决集和通知批次 .
-   它尚未暴露出完整的TC39微妙的内向表面.

## API 注释

-   `subscribe(...)` 用于适配器式的推力集成. 应用程序级别的衍生工作通常以下列方式表达: `Computed`, (中文(简体) ), `effect(...)`,或 `watch(...)`。 。 。 .
-   `watch(...)` 建立在计算信号和效果之上,因此它继承了计算平等行为和效果调度。 它在变化时通知,而不是每个冲出:在排程器运行之前,一个套装,然后是套装 `previousValue` 是最后交付的值.
-   `subtle.Watcher` 报告停滞而不是重新计算值。 通话 `watch(...)` 既是注册也是重置.
-   `createStore(...)` 覆盖嵌入的平原对象和阵列,同时 `snapshot(...)` 解析当前用于日志、序列化或比较的平面值图表.
-   `mapItems(source, project, options?)` 将每个项目的结果按项目身份来保留,因此只能预测新项目,其他项目保留相同的结果对象. `project` 运行未跟踪,所以读取其项目信号的结果不会重映射列表. 诸如 `@ecopages/jsx` 跳过值不变的行; JSX 用户可以使用 `<MapItems each={list}>` 换句话说.

## 示例

```ts
import { Computed, State, createStore, effect, watch } from '@ecopages/signals';

const count = new State(0);
const parity = new Computed(() => ((count.get() & 1) === 0 ? 'even' : 'odd'));
const store = createStore({ profile: { name: 'Ada' } });

const dispose = effect(() => {
    console.log(parity.get(), store.profile.name);
});

const stopWatching = watch(
    () => store.profile.name,
    (nextName, previousName) => {
        console.log(previousName, '->', nextName);
    },
);

count.set(1);
store.profile.name = 'Grace';
dispose();
stopWatching();
```

## 限制

这一执行情况仍然比目前的TC39提案草案要小.

-   没有完整的TC39 `Watcher` 和微妙的语义浮出水面
-   还没有一个完整的提议式的 微妙的回顾帮助者
-   没有批量或交易模式
-   尚未将框架所属处置树或组成部分所有权整合

这些遗漏是蓄意的。 目标是保持一个小的、有用的独立一揽子方案,同时留有余地随着提案的发展进一步调整.

## 常见问题

### @ecopages/signals 是什么？

基于 TC39 信号提案的可知信号原始

### 如何安装 @ecopages/signals？

在项目目录运行 npm install @ecopages/signals，或使用 pnpm add / yarn add / bun add。

### @ecopages/signals 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @ecopages/signals 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @ecopages/signals 可以商用吗？

@ecopages/signals 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @ecopages/signals 的下载量有多少？

根据 npm 官方下载统计，@ecopages/signals 在 2026/10/13 – 2026/11/11 这 30 天内被下载 6,057 次，日均约 202 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @ecopages/signals 还在维护吗？

最新版本 0\.8\.3 发布于 2026/11/13（今天）；至今共发布 58 个版本，其中过去 12 个月发布了 58 个；首次发布于 2026/04/13。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

