A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/vuejs/vue-next/commit/a641eb201fe51620d50884b988f6fefc3e21a20b below:

fix cases of reused children arrays in render func… · vuejs/core@a641eb2 · GitHub

File tree Expand file treeCollapse file tree 2 files changed

+42

-2

lines changed

Filter options

Expand file treeCollapse file tree 2 files changed

+42

-2

lines changed Original file line number Diff line number Diff line change

@@ -296,4 +296,39 @@ describe('renderer: component', () => {

296 296

expect(serializeInner(root)).toBe(`<h1>1</h1>`)

297 297

})

298 298

})

299 + 300 +

test('the component VNode should be cloned when reusing it', () => {

301 +

const Child = {

302 +

setup(props: any, { slots }: SetupContext) {

303 +

return () => {

304 +

const c = slots.default!()

305 +

return [c, c, c]

306 +

}

307 +

}

308 +

}

309 + 310 +

const ids: number[] = []

311 +

const Comp = {

312 +

render: () => h('h1'),

313 +

beforeUnmount() {

314 +

ids.push((this as any).$.uid)

315 +

}

316 +

}

317 + 318 +

const App = {

319 +

setup() {

320 +

return () => {

321 +

return h(Child, () => [h(Comp)])

322 +

}

323 +

}

324 +

}

325 + 326 +

const root = nodeOps.createElement('div')

327 +

render(h(App), root)

328 +

expect(serializeInner(root)).toBe(`<h1></h1><h1></h1><h1></h1>`)

329 + 330 +

render(null, root)

331 +

expect(serializeInner(root)).toBe(``)

332 +

expect(ids).toEqual([ids[0], ids[0] + 1, ids[0] + 2])

333 +

})

299 334

})

Original file line number Diff line number Diff line change

@@ -603,11 +603,16 @@ export function normalizeVNode(child: VNodeChild): VNode {

603 603

return createVNode(Comment)

604 604

} else if (isArray(child)) {

605 605

// fragment

606 -

return createVNode(Fragment, null, child)

606 +

return createVNode(

607 +

Fragment,

608 +

null,

609 +

// #3666, avoid reference pollution when reusing vnode

610 +

child.slice()

611 +

)

607 612

} else if (typeof child === 'object') {

608 613

// already vnode, this should be the most common since compiled templates

609 614

// always produce all-vnode children arrays

610 -

return child.el === null ? child : cloneVNode(child)

615 +

return cloneIfMounted(child)

611 616

} else {

612 617

// strings and numbers

613 618

return createVNode(Text, null, String(child))

You can’t perform that action at this time.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4