提交 95177e1d 编写于 作者: fxy060608's avatar fxy060608

feat(v3): improve diff data

上级 da08c565
...@@ -9102,15 +9102,21 @@ var serviceContext = (function () { ...@@ -9102,15 +9102,21 @@ var serviceContext = (function () {
data[k] = v; data[k] = v;
} }
function diffObject (id, newObj, oldObj, result) { function diffObject (newObj, oldObj) {
let key, cur, old; let result, key, cur, old;
for (key in newObj) { for (key in newObj) {
cur = newObj[key]; cur = newObj[key];
old = oldObj[key]; old = oldObj[key];
if (old !== cur) { if (old !== cur) {
setResult(result[id] || (result[id] = {}), key, cur); if (key === 's' && isPlainObject(cur) && isPlainObject(old)) {
const style = diffObject(cur, old);
style && setResult(result || (result = Object.create(null)), 's', style);
} else {
setResult(result || (result = Object.create(null)), key, cur);
}
} }
} }
return result
} }
function diff (newData, oldData, result) { function diff (newData, oldData, result) {
...@@ -9122,7 +9128,8 @@ var serviceContext = (function () { ...@@ -9122,7 +9128,8 @@ var serviceContext = (function () {
setResult(result, id, cur); setResult(result, id, cur);
continue continue
} }
diffObject(id, cur, old, result); const idObj = diffObject(cur, old);
idObj && setResult(result, id, idObj);
} }
return result return result
} }
......
import {
isPlainObject
} from 'uni-shared'
function setResult (data, k, v) { function setResult (data, k, v) {
data[k] = v data[k] = v
} }
function diffObject (id, newObj, oldObj, result) { function diffObject (newObj, oldObj) {
let key, cur, old let result, key, cur, old
for (key in newObj) { for (key in newObj) {
cur = newObj[key] cur = newObj[key]
old = oldObj[key] old = oldObj[key]
if (old !== cur) { if (old !== cur) {
setResult(result[id] || (result[id] = {}), key, cur) if (key === 's' && isPlainObject(cur) && isPlainObject(old)) {
const style = diffObject(cur, old)
style && setResult(result || (result = Object.create(null)), 's', style)
} else {
setResult(result || (result = Object.create(null)), key, cur)
}
} }
} }
return result
} }
export function diff (newData, oldData, result) { export function diff (newData, oldData, result) {
...@@ -22,7 +32,8 @@ export function diff (newData, oldData, result) { ...@@ -22,7 +32,8 @@ export function diff (newData, oldData, result) {
setResult(result, id, cur) setResult(result, id, cur)
continue continue
} }
diffObject(id, cur, old, result) const idObj = diffObject(cur, old)
idObj && setResult(result, id, idObj)
} }
return result return result
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册