From beef6c6662b7f089e7fa9ff0730977be3f02fd4d Mon Sep 17 00:00:00 2001 From: tangjinzhou <415800467@qq.com> Date: Wed, 30 Jan 2019 21:31:36 +0800 Subject: [PATCH] perf: update formItem give some tip --- components/form/FormItem.jsx | 40 +++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/components/form/FormItem.jsx b/components/form/FormItem.jsx index 099f758ea..614309e93 100644 --- a/components/form/FormItem.jsx +++ b/components/form/FormItem.jsx @@ -66,23 +66,17 @@ export default { decoratorFormProps: { default: () => ({}) }, collectFormItemContext: { default: () => noop }, }, + created() { + this.collectContext(); + }, data() { - const { templateContext = {} } = this.FormProps.form || {}; - const vnodes = Object.values(templateContext.$slots || {}).reduce((a, b) => { - return [...a, ...b]; - }, []); - const isSlot = comeFromSlot(vnodes, this.$vnode); - warning(!isSlot, 'You can not set FormItem from slot, please use slot-scope instead slot'); - let isSlotScope = false; - // 进一步判断是否是通过slot-scope传递 - if (!isSlot && this.$vnode.context !== templateContext) { - isSlotScope = comeFromSlot(this.$vnode.context.$children, templateContext.$vnode); - } - if (!isSlotScope && !isSlot) { - this.collectFormItemContext(this.$vnode.context); - } return { helpShow: false }; }, + beforeUpdate() { + if (process.env.NODE_ENV !== 'production') { + this.collectContext(); + } + }, beforeDestroy() { this.collectFormItemContext(this.$vnode.context, 'delete'); }, @@ -98,6 +92,24 @@ export default { ); }, methods: { + collectContext() { + if (this.FormProps.form && this.FormProps.form.templateContext) { + const { templateContext } = this.FormProps.form; + const vnodes = Object.values(templateContext.$slots || {}).reduce((a, b) => { + return [...a, ...b]; + }, []); + const isSlot = comeFromSlot(vnodes, this.$vnode); + warning(!isSlot, 'You can not set FormItem from slot, please use slot-scope instead slot'); + let isSlotScope = false; + // 进一步判断是否是通过slot-scope传递 + if (!isSlot && this.$vnode.context !== templateContext) { + isSlotScope = comeFromSlot(this.$vnode.context.$children, templateContext.$vnode); + } + if (!isSlotScope && !isSlot) { + this.collectFormItemContext(this.$vnode.context); + } + } + }, getHelpMessage() { const help = getComponentFromProp(this, 'help'); const onlyControl = this.getOnlyControl();