From 31b7234864c2e43299ddcf8ae520b7cc8d1e163e Mon Sep 17 00:00:00 2001 From: neverland Date: Mon, 9 Sep 2019 20:16:47 +0800 Subject: [PATCH] feat: remove computed option support (#2002) --- packages/common/component.ts | 5 +-- packages/definitions/index.ts | 11 ++---- packages/mixins/observer/behavior.ts | 57 ++++------------------------ packages/mixins/observer/index.ts | 12 +----- packages/mixins/observer/props.ts | 25 ------------ 5 files changed, 13 insertions(+), 97 deletions(-) delete mode 100644 packages/mixins/observer/props.ts diff --git a/packages/common/component.ts b/packages/common/component.ts index 2d865fa9..2f6c084b 100644 --- a/packages/common/component.ts +++ b/packages/common/component.ts @@ -10,13 +10,12 @@ function mapKeys(source: object, target: object, map: object) { }); } -function VantComponent( +function VantComponent( vantOptions: VantComponentOptions< Data, Props, Methods, - Computed, - CombinedComponentInstance + CombinedComponentInstance > = {} ): void { const options: any = {}; diff --git a/packages/definitions/index.ts b/packages/definitions/index.ts index 8b2c9864..a99516bc 100644 --- a/packages/definitions/index.ts +++ b/packages/definitions/index.ts @@ -1,30 +1,25 @@ import { Weapp } from './weapp'; type RecordToAny = { [K in keyof T]: any }; -type RecordToReturn = { - [P in keyof T]: T[P] extends (...args: any[]) => any ? ReturnType : T[P] -}; export type CombinedComponentInstance< Data, Props, - Methods, - Computed + Methods > = Methods & WechatMiniprogram.Component.TrivialInstance & Weapp.FormField & { - data: Data & RecordToReturn & RecordToAny; + data: Data & RecordToAny; }; -export interface VantComponentOptions { +export interface VantComponentOptions { data?: Data; field?: boolean; classes?: string[]; mixins?: string[]; props?: Props & Weapp.PropertyOption; watch?: Weapp.WatchOption; - computed?: Computed & Weapp.ComputedOption; relation?: Weapp.RelationOption & { name: string }; relations?: { [componentName: string]: Weapp.RelationOption; diff --git a/packages/mixins/observer/behavior.ts b/packages/mixins/observer/behavior.ts index 8583b6b9..a21d5170 100644 --- a/packages/mixins/observer/behavior.ts +++ b/packages/mixins/observer/behavior.ts @@ -1,56 +1,13 @@ -function setAsync(context: WechatMiniprogram.Component.TrivialInstance, data: object) { - return new Promise(resolve => { - context.setData(data, resolve); - }); -} - export const behavior = Behavior({ - created() { - if (!this.$options) { - return; - } - - const cache = {}; - const { computed } = this.$options(); - const keys = Object.keys(computed); - - this.calcComputed = () => { - const needUpdate = {}; - keys.forEach(key => { - const value = computed[key].call(this); - - if (cache[key] !== value) { - cache[key] = value; - needUpdate[key] = value; - } - }); - - return needUpdate; - }; - }, - - attached() { - this.set(); - }, - methods: { - // set data and set computed data set(data: object, callback: Function) { - const stack = []; - - if (data) { - stack.push(setAsync(this, data)); - } - - if (this.calcComputed) { - stack.push(setAsync(this, this.calcComputed())); - } - - return Promise.all(stack).then(res => { - if (callback && typeof callback === 'function') { - callback.call(this); - } - return res; + return new Promise(resolve => { + this.setData(data, () => { + if (callback && typeof callback === 'function') { + callback.call(this); + } + resolve(); + }); }); } } diff --git a/packages/mixins/observer/index.ts b/packages/mixins/observer/index.ts index afc1cd46..ddea609c 100644 --- a/packages/mixins/observer/index.ts +++ b/packages/mixins/observer/index.ts @@ -1,8 +1,7 @@ import { behavior } from './behavior'; -import { observeProps } from './props'; export function observe(vantOptions, options) { - const { watch, computed } = vantOptions; + const { watch } = vantOptions; options.behaviors.push(behavior); @@ -21,13 +20,4 @@ export function observe(vantOptions, options) { options.properties = props; } - - if (computed) { - options.methods = options.methods || {}; - options.methods.$options = () => vantOptions; - - if (options.properties) { - observeProps(options.properties); - } - } } diff --git a/packages/mixins/observer/props.ts b/packages/mixins/observer/props.ts deleted file mode 100644 index 7050b5b3..00000000 --- a/packages/mixins/observer/props.ts +++ /dev/null @@ -1,25 +0,0 @@ -export function observeProps(props) { - if (!props) { - return; - } - - Object.keys(props).forEach(key => { - let prop = props[key]; - if (prop === null || !('type' in prop)) { - prop = { type: prop }; - } - - let { observer } = prop; - prop.observer = function (...args) { - if (observer) { - if (typeof observer === 'string') { - observer = this[observer]; - } - observer.apply(this, args); - } - this.set(); - }; - - props[key] = prop; - }); -}