Skip to content

Commit 87edc4c

Browse files
committed
fixes overly aggressive text node reuse DOM diff'ing bug
1 parent 75739f8 commit 87edc4c

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

karax/karax.nim

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ proc eq(a, b: VNode): EqResult =
233233
if a.kind == VNodeKind.text:
234234
if a.text != b.text:
235235
when defined(profileKarax): inc reasons[deText]
236-
return similar
236+
return different # similar
237237
elif a.kind == VNodeKind.vthunk or a.kind == VNodeKind.dthunk:
238238
if a.text != b.text: return different
239239
if a.len != b.len: return different
@@ -648,7 +648,8 @@ proc setRenderer*(renderer: proc (): VNode, root: cstring = "ROOT",
648648
clientPostRenderCallback: proc () = nil): KaraxInstance {.discardable.} =
649649
## Setup Karax. Usually the return value can be ignored.
650650
proc wrapRenderer(data: RouterData): VNode = result = renderer()
651-
proc wrapPostRender(data: RouterData) = clientPostRenderCallback()
651+
proc wrapPostRender(data: RouterData) =
652+
if clientPostRenderCallback != nil: clientPostRenderCallback()
652653
setRenderer(wrapRenderer, root, wrapPostRender)
653654

654655
proc setInitializer*(renderer: proc (data: RouterData): VNode, root: cstring = "ROOT",

tests/difftest.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,14 +156,14 @@ proc testWild() =
156156
let a = createEntries(entries)
157157
entries = @[cstring("0"), cstring("1"), cstring("2"), cstring("3"), cstring("4"), cstring("5")]
158158
let b = createEntries(entries)
159-
doDiff(a, b, "pkDetach button 7", "pkRemove nil", "pkDetach div 5", "pkRemove nil")
159+
doDiff(a, b, "pkDetach button 7", "pkRemove nil", "pkDetach div 7", "pkRemove nil")
160160

161161
proc testWildInsert() =
162162
var entries = @[cstring("0"), cstring("1"), cstring("2"), cstring("3"), cstring("4"), cstring("5")]
163163
let a = createEntries(entries)
164164
entries = @[cstring("0"), cstring("1"), cstring("2"), cstring("3"), cstring("4"), cstring"7", cstring("5")]
165165
let b = createEntries(entries)
166-
doDiff(a, b, "pkInsertBefore button 7", "pkAppend div 5")
166+
doDiff(a, b, "pkInsertBefore button 7", "pkInsertBefore div 7")
167167

168168
kxi = KaraxInstance(rootId: cstring"ROOT", renderer: proc (data: RouterData): VNode = discard,
169169
byId: newJDict[cstring, VNode]())

0 commit comments

Comments
 (0)