@expressive/mvc

中文文档
0.94.5发布于 2026/11/14MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 3022

基于阶级的反应状态管理 - Expressive MVC的框架-不可知性核心.

中文使用文档
文档目录7 节
  1. 型号
  2. 说明
  3. 生命周期
  4. 背景组成
  5. 活动
  6. 框架不可知性组成部分
  7. 许可证

@ 表达/ mvc

基于阶级的被动状态管理——框架-不可知性核心.

NPM Coverage


核心内容 表达式 MVC:反应性原始人围绕平原阶级而建,没有框架依赖. 规定 Model 类、 指令、 上下文, 以及 渲染器 - 不可知 Component 适配器喜欢 @expressive/react 继续前进.

建立反应应用程序? 安装 @expressive/react 与此软件包并列 - 适配器声明 @expressive/mvc 作为同伴的依赖, 所以两者都属于你的 package.json导入 Model, (中文(简体) ), Component,然后从此软件包中导入适配器一次,然后主机注册。 也一样 @expressive/dom,没有反应的渲染器.

它单独安装,为主机不可知码服务——共享域包,节点服务,或新适配器:

npm install @expressive/mvc

型号

A 类 Model 是一个类,其字段是被动的 - 读取以订阅,指定以更新。 获取器是缓存计算值 .

import { Model } from '@expressive/mvc';

class Counter extends Model {
  count = 0;
  increment() {
    this.count++;
  }

  get doubled() {
    return this.count * 2;     // recomputes only when count changes
  }
}

const counter = Counter.new();

// effect runs now, then again whenever read values change
counter.get(({ count }) => {
  console.log(`count is ${count}`);
});

counter.increment();           // -> "count is 1"

任何地点都进行试验,不需要制造器.

说明

改变属性行为方式的字段初始化器 :

ref()仍然具有反应性的可变参照物(例如DOM节点)
set()计算值、 智能设置器、 任务副作用
get()依赖性注射-再拉一拉 Model 从上下文
map()浅反应映射
has()自有反应收集 -- -- 命令列表或产卵池
import { Model, set, has, map } from '@expressive/mvc';

class Cart extends Model {
  items = has<Item>();                      // reactive collection
  products = map<string, Product>();        // reactive keyed collection
  coupon = set('', code => apply(code));    // side-effect on assignment
}

生命周期

class Timer extends Model {
  seconds = 0;

  new() {                              // runs once on activation
    const id = setInterval(() => this.seconds++, 1000);
    return () => clearInterval(id);    // returned cleanup runs on destroy
  }
}

const timer = Timer.new();   // construct + activate
timer.set(null);             // destroy - runs cleanup, freezes state

在服务器上制作的主机下, new() 仍然运行在那里,但它的清理从来没有做 - 所以这样的客户端资源会进入 mount() 相反, 它只运行在客户端上; 见主机的文档 .

背景组成

案例通过上下文互相发现,通过互相持有来作曲:

import { Model, get } from '@expressive/mvc';

class Session extends Model {
  user = 'guest';
}

class Profile extends Model {
  session = get(Session);    // injected from the nearest provider
  address = new Address();   // nested instance - its changes bubble up
}

<Component for={Model}> - 这个包裹的一部分 - 放置一个 Model 在一棵树上,有如 @expressive/react 让它,和 get() 把箱子拉出来.

活动

任何财产或任意的密钥都可以发送和监听:

const off = counter.set('refresh', () => reload());   // listen
counter.set('refresh');                               // dispatch
off();                                                // stop listening

框架不可知性组成部分

@expressive/mvc 舰载自己的JSX运行时间,因此您可以针对核心编写组件——包括可再使用的库——并让任何主机提供:

// tsconfig.json
{
  "compilerOptions": {
    "jsx": "react-jsx",
    "jsxImportSource": "@expressive/mvc"
  }
}

Component - 一个 Model 可以在JSX中使用 - 住在这里,与 <Component for>:道具,子组件,悬浮和上下文定位都是核心. 一个主机只能制作它们; 应用程序中的表情, 你看 @expressive/react。 。 。 .


要在用户界面中渲染状态,请添加一个主机: @expressive/react 或者说 @expressive/dom。 。 。 .

完整指南和 API 参考 github.com/gabeklein/表达式

许可证

麻省理工学院

版本与发布记录

@expressive/mvc 共发布 236 个版本,首次发布于 2021/06/22;过去 12 个月发布了 32 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.94.5latest2026/11/14今天
0.94.42026/11/131 天前
0.94.32026/11/113 天前
0.94.22026/11/103 天前
0.94.12026/11/059 天前
0.94.02026/11/0212 天前

其他发布通道:next → 0.0.2,canary → 0.52.2-alpha.74。

关于 @expressive/mvc 的常见问题

@expressive/mvc 是什么?

基于阶级的反应状态管理 - Expressive MVC的框架-不可知性核心.

如何安装 @expressive/mvc?

在项目目录运行 npm install @expressive/mvc,或使用 pnpm add / yarn add / bun add。

@expressive/mvc 支持 TypeScript 吗?

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

@expressive/mvc 支持 ESM 还是 CommonJS?

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

@expressive/mvc 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@expressive/mvc 可以商用吗?

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

@expressive/mvc 的下载量有多少?

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

@expressive/mvc 还在维护吗?

最新版本 0.94.5 发布于 2026/11/14(今天);至今共发布 236 个版本,其中过去 12 个月发布了 32 个;首次发布于 2021/06/22。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。