# dynamic-object

Latest version **2.2.1** (published 2017-07-02) · ISC license · 0 weekly downloads

## Install

```sh
npm install dynamic-object
pnpm add dynamic-object
yarn add dynamic-object
bun add dynamic-object
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.2.1 |
| Published | 2017-07-02 |
| First published | 2017-02-22 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 7 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | ascoders |

## Links

- npm: https://www.npmjs.com/package/dynamic-object
- Repository: https://github.com/ascoders/dependency-inject
- Homepage: https://github.com/ascoders/dependency-inject#readme
- Issues: https://github.com/ascoders/dependency-inject/issues
- npm.io page: https://npm.io/package/dynamic-object

## Dependencies (7)

- [mobx](https://npm.io/package/mobx.md) ^3.1.16
- [react](https://npm.io/package/react.md) ^15.5.4
- [redux](https://npm.io/package/redux.md) ^3.6.0
- [lodash](https://npm.io/package/lodash.md) ^4.17.4
- [immutable](https://npm.io/package/immutable.md) ^3.8.1
- [@types/node](https://npm.io/package/@types/node.md) ^7.0.31
- [@types/lodash](https://npm.io/package/@types/lodash.md) ^4.14.63

## Recent versions

- 2.2.1 (latest) — 2017-07-02
- 2.2.0 — 2017-06-29
- 2.1.20 — 2017-06-29
- 2.1.19 — 2017-06-17
- 2.1.18 — 2017-06-17
- 2.1.17 — 2017-06-17
- 2.1.16 — 2017-06-17
- 2.1.15 — 2017-06-16
- 2.1.14 — 2017-06-15
- 2.1.13 — 2017-05-28
- 2.1.12 — 2017-05-27
- 2.1.11 — 2017-05-20
- 2.1.10 — 2017-05-16
- 2.1.9 — 2017-05-13
- 2.1.8 — 2017-05-13
- … 15 more at https://npm.io/package/dynamic-object/versions

## README

# dynamic-object

<a href="https://travis-ci.org/ascoders/dynamic-object"><img src="https://img.shields.io/travis/ascoders/dynamic-object/master.svg?style=flat" alt="Build Status"></a>

`dynamic-object` 利用 `proxy` 完整实现了 `object.observer`。主要为 react 提供数据流功能。可以结合 `dynamic-react` 以 mutable 方式为 react 组织数据流；同时也支持融合 redux，结合 mutable 与 immutable 的优势，以 mutable 方式组织 store，以 immutable 方式更新数据。

> 功能与 [mobx](https://github.com/mobxjs/mobx) 很像，同时借鉴了 [nx-js](https://github.com/nx-js/observer-util) 实现理念。给力的地方在于，不支持 ie11 浏览器！非常激进，核心使用 `proxy`，抛弃兼容性换来的是超高的性能，以及完美的动态绑定。

核心用例：

```typescript
import { observable, observe } from "dynamic-object"

const dynamicObj = observable({
    a: 1
})

observe(() => {
    console.log("dynamicObj.a has changed to", dynamicObj.a) 
})
// output: dynamicObj.a has changed to 1

dynamicObj.a = 2
// output: `dynamicObj.a has changed to 2`
```

> [在线 Demo](https://jsfiddle.net/1q772uL0/17/)

## 安装

```bash
yarn add dynamic-object --save
```

## 稳定性

目前通过了 100%（50个）[测试用例](https://github.com/ascoders/dynamic-object/blob/master/src/main.test.ts)

## 功能

### 结合 dynamic-react

以 mutable 方式管理数据流，vm 层使用 dynamic-react，只有使用到的变量发生变动，才会触发更新！

查看 [在线 Demo](https://jsfiddle.net/yp90Lep9/20/)，支持分型的 [分型 Demo](https://jsfiddle.net/g19ehhgu/9/)

- [快速入门](./docs/mutable-quick-start.md)

#### Api

`observable`、`observe`: 产生对象的代理、动态跟踪代理对象变化；`dynamic-react`: 将代理对象结合到 react 当中，自动、精确的更新组件；`Action`: 建议所有修改收敛在 action 中，且支持更新合并。

- [observable, observe](./docs/observable.md)
- [unobserbe](./docs/unobserve.md)
- [dynamic-react](./docs/dynamic-react.md)
- [Action](./docs/action.md)

### 结合 dependency-inject

以依赖注入的方式管理 store 与 action，直接查看 [在线 Demo](https://jsfiddle.net/bmea0pat/21/)，快速结合 [分型 demo](https://jsfiddle.net/ppt3ztx7/3/)

### 结合 react-redux

支持以 mutable 方式管理数据流，但 vm 层对接到 redux，虽然以可变方式修改数据，但会自动生成不可变数据！[在线 Demo](https://jsfiddle.net/56saqqvw/5/)

- [createReduxStore](./docs/createReduxStore.md)
- [task](./docs/task.md)

也可以 fork 本项目，`npm start` 就可以打开 [redux todoMVC](./src/demo/todo-mvc)！数据层依然是 mutable。

# unpkg

https://unpkg.com/dynamic-object@2.1.19/built/bundle.js

[实现原理解析](./docs/principle.md)

---
_Source: https://npm.io/package/dynamic-object · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
