From bf9c20c3b4f577ba5dcfa59f6160bb9122423cec Mon Sep 17 00:00:00 2001 From: HcySunYang Date: Sun, 8 Apr 2018 23:53:21 +0800 Subject: [PATCH 1/2] refactor: avoid unnecessary and costly data observations --- src/core/observer/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/core/observer/index.js b/src/core/observer/index.js index 35469aaf16a..8219ef82a6b 100644 --- a/src/core/observer/index.js +++ b/src/core/observer/index.js @@ -172,7 +172,11 @@ export function defineReactive ( set: function reactiveSetter (newVal) { const value = getter ? getter.call(obj) : val /* eslint-disable no-self-compare */ - if (newVal === value || (newVal !== newVal && value !== value)) { + if ( + (getter && !setter) || + newVal === value || + (newVal !== newVal && value !== value) + ) { return } /* eslint-enable no-self-compare */ From cf67d10482db3ce62af504e95e35d9d079ef7dea Mon Sep 17 00:00:00 2001 From: HcySunYang Date: Wed, 20 Jun 2018 20:12:41 +0800 Subject: [PATCH 2/2] refactor: make the code more readable --- src/core/observer/index.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/core/observer/index.js b/src/core/observer/index.js index 8219ef82a6b..e373716c9f7 100644 --- a/src/core/observer/index.js +++ b/src/core/observer/index.js @@ -172,17 +172,15 @@ export function defineReactive ( set: function reactiveSetter (newVal) { const value = getter ? getter.call(obj) : val /* eslint-disable no-self-compare */ - if ( - (getter && !setter) || - newVal === value || - (newVal !== newVal && value !== value) - ) { + if (newVal === value || (newVal !== newVal && value !== value)) { return } /* eslint-enable no-self-compare */ if (process.env.NODE_ENV !== 'production' && customSetter) { customSetter() } + // #7981: for accessor properties without setter + if (getter && !setter) return if (setter) { setter.call(obj, newVal) } else {