Commit Graph

506 Commits

Author SHA1 Message Date
Yang Mingshan 80e1693e1f
fix(reactivity): replaced ref in reactive object should be tracked (#1058) 2020-06-12 09:20:43 -04:00
蜗牛老湿 f3eac11058
chore(reactivity): use ReactiveFlags instead of __v_ properties (#1313) 2020-06-11 17:32:44 -04:00
Evan You 10bb34bb86 fix(reactivity): fix toRaw for objects prototype inherting reactive
fix #1246
2020-06-11 15:12:57 -04:00
Evan You 80c868aefe workflow: setup eslint for prohibited syntax and globals
fix #1285
2020-06-10 16:54:23 -04:00
Carlos Rodrigues c97d1bae56
fix(reactivity): shallowReactive collection to not-readonly (#1212) 2020-06-09 17:20:30 -04:00
doly mood d3c436ae2e
feat(types): mixins/extends support in TypeScript (#626) 2020-06-09 10:37:00 -04:00
Carlos Rodrigues 488e2bcfef
fix(reactivity): shallowReactive for collections (#1204)
close #1202
2020-05-18 11:17:37 -04:00
zhangenming 6574a5bf29
chore: merge imports (#1182) 2020-05-18 10:12:14 -04:00
龙腾道 e08f6f0ede
fix(reactivity): use correct thisArg for collection method callbacks (#1132) 2020-05-06 13:41:34 -04:00
龙腾道 037fa07113
fix(reactivity): fix __proto__ access on proxy objects (#1133) 2020-05-06 09:08:44 -04:00
Evan You c6217b4d46 refactor(types): use pure type symbol 2020-05-04 09:38:32 -04:00
Evan You bc1f097e29 fix(types/reactivity): fix ref type inference on nested reactive properties with .value
fix #1111
2020-05-04 08:51:17 -04:00
Evan You f40f3a0e95 fix(reactivity): avoid polluting Object prototype 2020-05-04 08:51:17 -04:00
Jackliu 42a99d28ae
chore: typo (#1113) 2020-05-04 10:30:24 +02:00
Evan You 6be2b73f8a fix(reactivity): check own property for existing proxy of target
fix #1107
2020-05-03 15:36:19 -04:00
Evan You 0c48558f4c chore: remove commented stale code [ci skip] 2020-05-02 17:08:54 -04:00
Evan You d901b6bea8 refactor(reactivity): use more efficient reactive checks
WeakSets and WeakMaps shows degrading performance as the amount of
observed objects increases. Using hidden keys result in better
performance especially when repeatedly creating large amounts of
reactive proxies.

This also makes it possible to more efficiently declare non-reactive
objects in userland.
2020-05-02 16:58:17 -04:00
Evan You b40fcbc4c6 fix(types): augment ref unwrap bail types in appropriate packages
Packages can now augment the ref unwrap bail types in their own `d.ts`.
Also updated the build script to auto concat any files in a package's
`types` directory to the final generated `d.ts`.

- `@vue/reactivity` should no longer require `libs: ["DOM"]` in tsconfig
- Properly bail on `VNode` and `ComponentPublicInstance` in runtime-core
2020-05-01 16:14:30 -04:00
Evan You 352c369704 chore: remove stale _isVue checks 2020-04-30 14:45:25 -04:00
Carlos Rodrigues 28b4c317b4
feat(types): expose `ToRefs` type (#1037) 2020-04-24 13:10:16 -04:00
susiwen8 ad2b940c17
chore: remove unnecessary export (#1044) [ci skip] 2020-04-24 13:02:44 -04:00
Evan You 2acf3e84b9 feat(reactivity): add triggerRef API
Also make shallowRef assignment behavior consistent with normal ref
2020-04-22 18:00:10 -04:00
Evan You b0d4df9743 perf(reactivity): ref should not trigger if value did not change
Note: shallowRef will always trigger on assignment because it does not
account for deep mutations

close #1012
2020-04-22 15:11:01 -04:00
Carlos Rodrigues 0bdd889156
fix(types): fix ref(false) type to Ref<boolean> (#1028) 2020-04-22 11:54:54 -04:00
limichange fa40d1ef3a
refactor(reactivity): simplify if condition (#1002) 2020-04-20 13:39:35 -04:00
Cédric Exbrayat 4d014dc3d3
fix(reactivity): remove Symbol.observable (#968)
* chore: add @types/node as an explicit dependency

As `tsconfig.json` references it, it should be listed in the dependencies.
It currently uses an older version: this commit also bumps to the latest v12 version, and fixes a typing issue.

* fix(reactivity): remove Symbol.observable

`Symbol.observable` is brought by `@types/node@12` and is not a "well-known" typescript symbol https://www.typescriptlang.org/docs/handbook/symbols.html that can be find in lib.es20xx like the others. It has been removed in `@types/node@v13`.
It means that an application using vue@3.0.0-alpha.13 does not compile unless it explicitely adds `@types/node@v12` as a dependency and `node` in its own tsconfig types.
2020-04-16 09:33:30 -04:00
Evan You 09b4202a22 refactor(reactivity): adjust APIs
BREAKING CHANGE: Reactivity APIs adjustments:

- `readonly` is now non-tracking if called on plain objects.
  `lock` and `unlock` have been removed. A `readonly` proxy can no
  longer be directly mutated. However, it can still wrap an already
  reactive object and track changes to the source reactive object.

- `isReactive` now only returns true for proxies created by `reactive`,
   or a `readonly` proxy that wraps a `reactive` proxy.

- A new utility `isProxy` is introduced, which returns true for both
  reactive or readonly proxies.

- `markNonReactive` has been renamed to `markRaw`.
2020-04-15 16:45:20 -04:00
pikax 8a74260b70 types: remove tuple check and add type check for tuple 2020-04-15 16:22:44 +01:00
Carlos Rodrigues 70b55d797f
Apply suggestions from code review
Co-Authored-By: Evan You <yyx990803@gmail.com>
2020-04-15 16:07:07 +01:00
pikax dcb5985c00 Merge remote-tracking branch 'github/master' into changing_unwrap_ref 2020-04-15 15:54:26 +01:00
Evan You 3178504273 refactor(reactivity): make readonly non-tracking 2020-04-14 23:49:46 -04:00
Evan You 09b44e07cb refactor(reactivity): move array ref handling into getter 2020-04-14 22:18:58 -04:00
Evan You 486dc188fe feat(reactivity): add support for `toRef` API 2020-04-14 20:49:18 -04:00
Evan You b83c580131 feat(reactivity): add support for `customRef` API 2020-04-14 20:45:46 -04:00
Evan You 78977c3997 fix(scheduler): sort jobs before flushing
This fixes the case where a child component is added to the queue before
its parent, but should be invalidated by its parent's update. Same logic
was present in Vue 2.

Properly fixes #910
ref: https://github.com/vuejs/vue-next/issues/910#issuecomment-613097539
2020-04-14 17:31:35 -04:00
Evan You e8a866ec99 refactor(reactivity): remove stale API `markReadonly`
BREAKING CHANGE: `markReadonly` has been removed.
2020-04-13 17:39:48 -04:00
pikax 6a66b7b60a Merge remote-tracking branch 'github/master' into changing_unwrap_ref 2020-04-13 18:32:14 +01:00
Thorsten Lünborg 33ccfc0a8b
fix(types): UnwrapRef should bail on DOM element types (#952)
fix #951
2020-04-13 11:51:32 -04:00
pikax c20d8af8c0 types: add symbolExtract to extract all known symbols
#951
2020-04-12 11:45:56 +01:00
pikax ab9add4f78 types: bring back my changes 2020-04-08 21:34:00 +01:00
ysj16 667e42065d
chore: typo (#928) 2020-04-06 09:09:44 -04:00
Evan You 5dcc645fc0 fix(reactivity): track reactive keys in raw collection types
Also warn against presence of both raw and reactive versions of the
same object in a collection as keys.

fix #919
2020-04-04 12:57:22 -04:00
Evan You f3b6559408 fix(types/reactivity): add generics constraint for markNonReactive
fix #917
2020-04-03 21:06:03 -04:00
Evan You 0764c33d3d fix(reactivity): scheduled effect should not execute if stopped
fix #910
2020-04-02 19:50:48 -04:00
Evan You 45ba06ac5f fix(reactivity): should not trigger map keys iteration when keys did not change
fix #877
2020-03-24 12:43:06 -04:00
Evan You 1b2149dbb2 fix(reactivity): should not observe frozen objects
fix #867
2020-03-23 11:28:20 -04:00
Evan You b8c1be18f3 refactor(types): use stricter settings
fix #847
2020-03-23 11:08:22 -04:00
Evan You ba9a91c48c refactor: remove null comparisons 2020-03-18 18:14:51 -04:00
djy0 b13886b1ba
types(reactivity): remove this in get accessor, fix #800 (#806) 2020-03-09 16:01:49 -04:00
Evan You 274f81c5db fix(reactivity): allow effect trigger inside no-track execution contexts
fix #804
2020-03-06 12:11:37 -05:00
hareku 643ff233af
types(reactivity): add undefined type to ref/shallowRef when no args (#791) 2020-03-06 11:32:39 -05:00
Evan You a3066581f3 fix(reactivity): should not trigger length dependency on Array delete
close #774
2020-03-06 11:31:10 -05:00
Evan You cc69fd72e3 fix(reactivity): Map/Set identity methods should work even if raw value contains reactive entries
fix #799
2020-03-06 11:10:02 -05:00
Evan You 16f9e63951
types: remove 'this' annotation from 'get' accessor (#801)
The next version of Typescript disallows 'this' parameter annotations on
accessors, which causes vue-next to fail to compile.

This PR removes the annotation and adds a cast instead.

Fixes #800
2020-03-05 16:57:52 -06:00
Evan You 3206e5dfe5 fix(types): shallowRef should not unwrap value type 2020-02-25 20:43:01 -05:00
Evan You d4c6957e2d fix(types): ref value type unwrapping should happen at creation time 2020-02-25 19:44:06 -05:00
Evan You b36a76fe23 chore: remove debugger [ci skip] 2020-02-22 05:19:22 +01:00
guaijie 76c7f54269
perf(effect): optimize effect trigger for array length mutation (#761) 2020-02-22 05:17:30 +01:00
Evan You e9024bf1b7 feat(reactivity): expose unref and shallowRef 2020-02-22 04:39:32 +01:00
Evan You 775a7c2b41 refactor: preserve refs in reactive arrays
BREAKING CHANGE: reactive arrays no longer unwraps contained refs

    When reactive arrays contain refs, especially a mix of refs and
    plain values, Array prototype methods will fail to function
    properly - e.g. sort() or reverse() will overwrite the ref's value
    instead of moving it (see #737).

    Ensuring correct behavior for all possible Array methods while
    retaining the ref unwrapping behavior is exceedinly complicated; In
    addition, even if Vue handles the built-in methods internally, it
    would still break when the user attempts to use a 3rd party utility
    functioon (e.g. lodash) on a reactive array containing refs.

    After this commit, similar to other collection types like Map and
    Set, Arrays will no longer automatically unwrap contained refs.

    The usage of mixed refs and plain values in Arrays should be rare in
    practice. In cases where this is necessary, the user can create a
    computed property that performs the unwrapping.
2020-02-21 17:48:39 +01:00
Evan You 627b9df4a2 fix(types): improve ref typing, close #759 2020-02-21 17:45:42 +01:00
Evan You 33622d6360 perf(reactivity): only trigger all effects on Array length mutation if new length is shorter than old length 2020-02-21 15:05:16 +01:00
guaijie 5fac65589b
fix(reactivity): should trigger all effects when array length is mutated (#754) 2020-02-21 11:38:07 +01:00
Evan You e8e67729cb fix(reactivity): effect should handle self dependency mutations 2020-02-18 13:22:09 -05:00
Evan You e1c9153b9e fix(reactivity): trigger iteration effect on Map.set
fix #709
2020-02-18 00:09:24 -05:00
Evan You 2fb7a63943 fix(computed): support arrow function usage for computed option
fix #733
2020-02-17 23:22:25 -05:00
Evan You d9d63f21b1 fix(reactivity): avoid cross-component dependency leaks in setup() 2020-02-17 23:14:07 -05:00
jods 8874b21a7e perf(reactivity): better computed tracking (#710) 2020-02-09 15:25:17 -05:00
Dmitry Sharshakov 7f38c1e0ff
feat(reactivity): add shallowReactive function (#689) 2020-02-04 10:15:27 -05:00
Evan You 763faac182 wip(ssr): revert reactivity ssr paths
The perf gains are not worth the correctness issues these paths may lead to
2020-01-27 16:00:18 -05:00
Evan You e43f5935b5 refactor: better variable naming 2020-01-27 16:00:18 -05:00
Evan You 25a0d4a65f wip(ssr): reduce reactivity overhead during ssr 2020-01-27 16:00:17 -05:00
Evan You aefb7d282e fix(reactivity): Array methods relying on identity should work with raw values 2020-01-23 13:42:31 -05:00
likui 0c42a6d8fa types: refactor ref unwrapping (#646) 2020-01-20 13:22:18 -05:00
IU 2b4d0d6501 types(reactivity): handle primitive + object intersection types in UnwrapRef (#614) 2020-01-16 17:47:47 -05:00
likui 63a6563106 fix(reactivity): should delete observe value (#598)
fix #597
2020-01-13 17:11:49 -05:00
Carlos Rodrigues 985f4c91d9 types: improve isRef typing (#578) 2020-01-06 16:15:49 -05:00
Evan You 755c7b581c chore: mark get/set create calls pure 2019-12-20 11:16:46 -05:00
Evan You 0a4f306492 fix: shallowReadonly should keep reactive properties reactive
ref #552
2019-12-20 11:14:07 -05:00
Evan You 46c5393224 perf(reactivity): optimize effect stack 2019-12-13 23:06:55 -05:00
ztplz 02478b48eb chore: use const instead of let (#524) 2019-12-06 00:10:06 +01:00
Evan You 89a187b895 refactor(reactivity): separate track and trigger operation types 2019-12-03 11:30:24 -05:00
Evan You 57bbbb227c fix(core): propsProxy should not convert non-reactive nested values 2019-12-02 14:11:12 -05:00
ztplz 2d40466d35 chore: remove unused parameter type definitions (#481) 2019-11-22 15:35:58 -05:00
Evan You 61d8941692 types(reactivity): ref type should not expose _isRef 2019-11-08 13:29:43 -05:00
Carlos Rodrigues 68ad302714 types(reactivity): add support for tuples in ref unwrapping (#436) 2019-11-08 12:52:24 -05:00
QuincyChen d7d87622ce refactor: use isArray function from shared (#441) 2019-11-08 09:52:24 -05:00
Evan You d9c6ff372c feat(core): allow passing explicit refs via props 2019-11-06 12:51:26 -05:00
Junyan a02820d7e0 feat: warn when toRefs() receives non-reactive object (#430) 2019-11-05 10:44:28 -05:00
Evan You f3c1fa75f6 feat(reactivity): provide correct tracking info for refs 2019-11-02 23:20:49 -04:00
Evan You 66ecd8b47f types: setup tests for built d.ts files 2019-11-01 22:54:01 -04:00
Evan You 247c53672d refactor(reactivity): simplify effect options 2019-10-30 11:11:23 -04:00
Junyan d76cfba7fb refactor(reactivity): reduce code of type check (#377) 2019-10-25 11:15:04 -04:00
相学长 abfb2ec8ed types(reactivity): computed types remove `as` (#367) 2019-10-24 11:37:52 -04:00
Mayness 18a349ce8c fix(reactivity): account for NaN in value change checks (#361) 2019-10-23 11:53:43 -04:00
Cr 246cad7459 fix(reactivity): Map.set should trigger when adding new entry with undefined value (#364) 2019-10-23 11:00:55 -04:00
Evan You 590e4e0ba9 chore: fix DebuggerEvent export 2019-10-22 11:53:32 -04:00
Evan You af57ad110f chore: revert prettier 2019-10-22 11:53:32 -04:00
Evan You b5886189ba types: massive refactor 2019-10-22 11:53:32 -04:00
Dmitry Sharshakov 74d8c5919d types: improve computed types (#343) 2019-10-21 13:57:20 -04:00
Evan You d69d3bf765 fix(reactivity): revert to Reflect.get and add test cases 2019-10-18 15:31:28 -04:00
扩散性百万甜面包 3cd2f7e68e types: fix ref unwrapping when nested inside arrays (#331) 2019-10-18 14:54:05 -04:00
edison 60961ef5b6 perf(reactivity): optimize the performance of the `canObserve` (#330) 2019-10-18 12:11:58 -04:00
Evan You e3b68972d8 perf: minor tweaks 2019-10-17 15:02:15 -04:00
Evan You cdee65aa1b perf: revert to _isRef for perf
Benchmarking shows checking for a plain property is about 4~5x faster
than checking for a Symbol, likely because the Symbol does not fit well
into V8's hidden class model.
2019-10-17 15:02:14 -04:00
Tidyzq a72652f6e6 refactor(reactivity): immediate return (#301) 2019-10-16 01:58:11 -04:00
edison b5209277de refactor(reactivity): define hadKey if necessary (#288) 2019-10-15 11:59:40 -04:00
夜宴 9a37c4b2c3 refactor(effect): use includes instead of indexOf (#286) 2019-10-15 11:18:26 -04:00
Evan You 1c56d1bf19 test: test unwrapping computed refs 2019-10-14 11:21:09 -04:00
Jooger d8b2b9eb9c types(ref): improve UnwrapRef types (#266) 2019-10-14 11:02:49 -04:00
Jooger 675ce2c15d types(reactivity): fix ref typing (#239) 2019-10-12 11:05:34 -04:00
Chester e68321eac0 chore: use '' instead of undefined (#205) 2019-10-11 22:04:33 -04:00
相学长 cbb4b19cfb feat(reactivity): ref(Ref) should return Ref (#180) 2019-10-10 11:34:42 -04:00
扩散性百万甜面包 def27239bd type: improve typing (#177) 2019-10-09 14:01:53 -04:00
Evan You 8f1475b8dd refactor(reactivity): use NOOP for readonly computed setter in production 2019-10-09 12:22:08 -04:00
Dmitry Sharshakov 530be302fc feat(computed): warn if trying to set a readonly computed (#161) 2019-10-09 12:20:53 -04:00
terencez dadfb27eed refactor(reactivity): prefer to use effect symbol and add isEffect() (#169) 2019-10-09 12:16:29 -04:00
terencez ff68db46ea fix(reactivity): avoid triggering effect when deleting property returns false (#168) 2019-10-09 11:55:57 -04:00
Cr b9a4d8d088 refactor(reactivity): use function isSymbol instead of typeof (#155) 2019-10-09 11:49:23 -04:00
扩散性百万甜面包 80e5b16f99 types: improve type 'ReactiveEffect' with generics (#99) 2019-10-08 13:48:13 -04:00
Andrew / Kana c6b7afcc23 types: use recursion for unwrapping refs (#137) 2019-10-06 20:11:52 -04:00
Carlos Rodrigues 8d70093802 refactor(reactivity): change _isRef to use refSymbol as key (#124) 2019-10-06 11:46:08 -04:00
月迷津渡 5eacfaf210 fix(reactivity): explicitly do type conversions in warning strings (#129) 2019-10-06 11:26:33 -04:00
Carlos Rodrigues 3d975247cd types: cleanup some unnecessary typing in reactivity (#126) 2019-10-06 11:22:32 -04:00
Rahul Kadyan f58e5e96f2 types: Use unique symbol type for _isRef property of ref object (#118) 2019-10-05 22:32:50 -04:00
扩散性百万甜面包 caa9297da6 refactor: move writable check out of computed setter (#112) 2019-10-05 15:48:05 -04:00
扩散性百万甜面包 0bdee72e17 feat(reactivity): use Symbol for Ref._isRef (#114) 2019-10-05 15:46:36 -04:00
扩散性百万甜面包 842f235ede chore: fix typo (#108) 2019-10-05 15:39:47 -04:00
Carlos Rodrigues fbabae0c0a chore: replace some type casts and fix variable and filename typos (#93) 2019-10-05 10:38:02 -04:00
扩散性百万甜面包 5c1e42f754 types: improve type 'Ref' (#105) 2019-10-05 10:10:37 -04:00
Evan You 46bd9dbab0 perf: avoid using WeakSet for isRef check 2019-09-30 14:52:10 -04:00
Evan You b3b67b8c7d feat(compiler): ensure interpolation expressions are wrapped with toString() 2019-09-23 15:36:30 -04:00
Evan You 360f3b4f37 types: improve type exports 2019-09-06 12:58:31 -04:00
Evan You 891f21b010 refactor: extract hasOwn helper 2019-09-05 20:48:14 -04:00
Evan You 6c7cbb0dc9 types: avoid plain objects with value being mistaken as refs 2019-09-05 18:32:19 -04:00
Evan You 9b90e673e8 wip: improve options typing 2019-09-05 16:09:30 -04:00
Evan You a6de6daa17 wip: disable tracking in all hooks 2019-09-04 18:20:47 -04:00
Evan You a6616e4210 feat: 2.x options support 2019-09-03 22:25:38 -04:00
Evan You 7ecdc79d5e test: finish tests for watch api 2019-08-27 11:35:22 -04:00
Evan You 3efe0ba3cd test: jest warning assert utils 2019-08-26 16:08:23 -04:00
Evan You 589d3c2feb refactor: immutable -> readonly 2019-08-23 09:38:32 -04:00
Evan You daf67397ae wip: pass attrs fallthrough tests 2019-08-22 22:07:51 -04:00
Evan You 0aff144f93 wip: improve computed typing + test for setters 2019-08-21 12:01:05 -04:00
Evan You aacad85058 test: fix reactivity tests 2019-08-20 09:58:10 -04:00
Evan You 0519e10518 wip: make computed implementation consistent 2019-08-20 09:45:28 -04:00
Evan You b218678c66 feat: toRefs 2019-08-20 09:38:00 -04:00
Evan You e53874f7e7 fix: reactive and immutable should warn for undefined 2019-08-19 15:01:50 -04:00
Evan You 6a22ad2fb2 types: simplify ref type 2019-08-18 22:48:46 -04:00
Evan You 3facfa5a55 wip: adjust computed ref type 2019-08-16 10:52:45 -04:00
Evan You 96d65e1ab5 wip: improve ref typing 2019-08-16 09:54:57 -04:00
Evan You caba6d5c9e wip: state -> reactive, value -> ref 2019-08-16 09:42:46 -04:00
Evan You 09141b56fd wip: proper handling of value assignment in reactive object 2019-08-13 11:30:28 -04:00
Evan You 2fc0d599db revert: "wip: handle value -> value assignment in reactive object"
This reverts commit 61ab483af1.
2019-08-13 11:27:48 -04:00
Evan You 61ab483af1 wip: handle value -> value assignment in reactive object 2019-08-13 11:13:26 -04:00
Evan You bfe6987323 refactor: adjust reactivity structure 2019-06-12 00:03:50 +08:00
Evan You 471899af8b refactor: rename reactivity package name and APIs 2019-06-11 23:50:28 +08:00