From c9304554d3893459e2dee382861394edcfbb4528 Mon Sep 17 00:00:00 2001 From: suxin2017 <1107178482@qq.com> Date: Fri, 29 Jan 2021 14:24:58 +0800 Subject: [PATCH 1/5] fix: same-text-no-update --- src/compiler/compile/render_dom/index.ts | 1 - src/runtime/internal/dev.ts | 2 +- src/runtime/internal/dom.ts | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/compiler/compile/render_dom/index.ts b/src/compiler/compile/render_dom/index.ts index 3b1f873ba501..99e5f112abcc 100644 --- a/src/compiler/compile/render_dom/index.ts +++ b/src/compiler/compile/render_dom/index.ts @@ -549,7 +549,6 @@ export default function dom( body.push(declaration); } - return { js: flatten(body, []), css }; } diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index 53f6ef3bf1ba..cd61ec98d62d 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -73,7 +73,7 @@ export function dataset_dev(node: HTMLElement, property: string, value?: any) { export function set_data_dev(text, data) { data = '' + data; - if (text.wholeText === data) return; + if (text === data) return; dispatch_dev('SvelteDOMSetData', { node: text, data }); text.data = data; diff --git a/src/runtime/internal/dom.ts b/src/runtime/internal/dom.ts index 8d99234c9de2..663cc27ca062 100644 --- a/src/runtime/internal/dom.ts +++ b/src/runtime/internal/dom.ts @@ -193,7 +193,7 @@ export function claim_space(nodes) { export function set_data(text, data) { data = '' + data; - if (text.wholeText !== data) text.data = data; + if (text !== data) text.data = data; } export function set_input_value(input, value) { From fbf0ed926b82104ef680a7c17808d503af9c20d6 Mon Sep 17 00:00:00 2001 From: suxin2017 <1107178482@qq.com> Date: Fri, 29 Jan 2021 20:56:22 +0800 Subject: [PATCH 2/5] fix: same-text-no-update --- src/runtime/internal/dev.ts | 9 +++++++-- src/runtime/internal/dom.ts | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index cd61ec98d62d..bc7f39a8d603 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -73,8 +73,13 @@ export function dataset_dev(node: HTMLElement, property: string, value?: any) { export function set_data_dev(text, data) { data = '' + data; - if (text === data) return; - + // In particular, when the property is contentEditable, ' 'TEXT_NODE is inserted into the text + if (text.textContent === '' && text.wholeText !== '') { + if (text.wholeText === data) return; + } else { + if (text.textContent === data) return; + } + dispatch_dev('SvelteDOMSetData', { node: text, data }); text.data = data; } diff --git a/src/runtime/internal/dom.ts b/src/runtime/internal/dom.ts index 663cc27ca062..8d99234c9de2 100644 --- a/src/runtime/internal/dom.ts +++ b/src/runtime/internal/dom.ts @@ -193,7 +193,7 @@ export function claim_space(nodes) { export function set_data(text, data) { data = '' + data; - if (text !== data) text.data = data; + if (text.wholeText !== data) text.data = data; } export function set_input_value(input, value) { From 6bbacfbd15c65d8a63c92a2fecb431d8e9269f1e Mon Sep 17 00:00:00 2001 From: suxin2017 <1107178482@qq.com> Date: Fri, 29 Jan 2021 20:57:17 +0800 Subject: [PATCH 3/5] chore: a problem --- src/runtime/internal/dom.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/runtime/internal/dom.ts b/src/runtime/internal/dom.ts index 8d99234c9de2..234eca90a48b 100644 --- a/src/runtime/internal/dom.ts +++ b/src/runtime/internal/dom.ts @@ -193,6 +193,7 @@ export function claim_space(nodes) { export function set_data(text, data) { data = '' + data; + // ??? I'm not sure if I need to change this if (text.wholeText !== data) text.data = data; } From c257ff124296e2ce14fd2e626c58743ad0a216f6 Mon Sep 17 00:00:00 2001 From: suxin2017 <1107178482@qq.com> Date: Fri, 29 Jan 2021 20:59:50 +0800 Subject: [PATCH 4/5] fix: empty fix --- src/compiler/compile/render_dom/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/compiler/compile/render_dom/index.ts b/src/compiler/compile/render_dom/index.ts index 99e5f112abcc..c19a5c3cdd08 100644 --- a/src/compiler/compile/render_dom/index.ts +++ b/src/compiler/compile/render_dom/index.ts @@ -549,6 +549,7 @@ export default function dom( body.push(declaration); } + return { js: flatten(body, []), css }; } From 3caa3a7f295c850a027757491080eb14451bfe93 Mon Sep 17 00:00:00 2001 From: suxin2017 <1107178482@qq.com> Date: Sat, 30 Jan 2021 09:00:05 +0800 Subject: [PATCH 5/5] feat: add reactive-values-text-node test case --- src/runtime/internal/dom.ts | 9 +++++++-- .../runtime/samples/reactive-values-text-node/_config.js | 9 +++++++++ .../samples/reactive-values-text-node/main.svelte | 8 ++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 test/runtime/samples/reactive-values-text-node/_config.js create mode 100644 test/runtime/samples/reactive-values-text-node/main.svelte diff --git a/src/runtime/internal/dom.ts b/src/runtime/internal/dom.ts index 234eca90a48b..1ac39aff5152 100644 --- a/src/runtime/internal/dom.ts +++ b/src/runtime/internal/dom.ts @@ -193,8 +193,13 @@ export function claim_space(nodes) { export function set_data(text, data) { data = '' + data; - // ??? I'm not sure if I need to change this - if (text.wholeText !== data) text.data = data; + // In particular, when the property is contentEditable, ' 'TEXT_NODE is inserted into the text + if (text.textContent === '' && text.wholeText !== '') { + if (text.wholeText === data) return; + } else { + if (text.textContent === data) return; + } + text.data = data; } export function set_input_value(input, value) { diff --git a/test/runtime/samples/reactive-values-text-node/_config.js b/test/runtime/samples/reactive-values-text-node/_config.js new file mode 100644 index 000000000000..9e0cb2d5d306 --- /dev/null +++ b/test/runtime/samples/reactive-values-text-node/_config.js @@ -0,0 +1,9 @@ +export default { + html:'
same text
', + async test({ assert, component, target }) { + await new Promise(f => setTimeout(f, 10)); + assert.htmlEqual(target.innerHTML, ` +
same text text
+ `); + } +}; diff --git a/test/runtime/samples/reactive-values-text-node/main.svelte b/test/runtime/samples/reactive-values-text-node/main.svelte new file mode 100644 index 000000000000..1ca11d19f443 --- /dev/null +++ b/test/runtime/samples/reactive-values-text-node/main.svelte @@ -0,0 +1,8 @@ + + +
{text} text
\ No newline at end of file