mirror of https://github.com/vuejs/core.git
fix(runtime-core): fix v-for ref reactivity behavior difference between prod and dev (#6714)
fix #6697
This commit is contained in:
parent
82a73da351
commit
9ae796d156
|
@ -493,4 +493,50 @@ describe('api: template refs', () => {
|
|||
await nextTick()
|
||||
expect(mapRefs()).toMatchObject(['2', '3', '4'])
|
||||
})
|
||||
|
||||
// #6697 v-for ref behaves differently under production and development
|
||||
test('named ref in v-for , should be responsive when rendering', async () => {
|
||||
const list = ref([1, 2, 3])
|
||||
const listRefs = ref([])
|
||||
const App = {
|
||||
setup() {
|
||||
return { listRefs }
|
||||
},
|
||||
render() {
|
||||
return h('div', null, [
|
||||
h('div', null, String(listRefs.value)),
|
||||
h(
|
||||
'ul',
|
||||
list.value.map(i =>
|
||||
h(
|
||||
'li',
|
||||
{
|
||||
ref: 'listRefs',
|
||||
ref_for: true
|
||||
},
|
||||
i
|
||||
)
|
||||
)
|
||||
)
|
||||
])
|
||||
}
|
||||
}
|
||||
const root = nodeOps.createElement('div')
|
||||
render(h(App), root)
|
||||
|
||||
await nextTick()
|
||||
expect(String(listRefs.value)).toBe(
|
||||
'[object Object],[object Object],[object Object]'
|
||||
)
|
||||
expect(serializeInner(root)).toBe(
|
||||
'<div><div>[object Object],[object Object],[object Object]</div><ul><li>1</li><li>2</li><li>3</li></ul></div>'
|
||||
)
|
||||
|
||||
list.value.splice(0, 1)
|
||||
await nextTick()
|
||||
expect(String(listRefs.value)).toBe('[object Object],[object Object]')
|
||||
expect(serializeInner(root)).toBe(
|
||||
'<div><div>[object Object],[object Object]</div><ul><li>2</li><li>3</li></ul></div>'
|
||||
)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -84,7 +84,11 @@ export function setRef(
|
|||
if (_isString || _isRef) {
|
||||
const doSet = () => {
|
||||
if (rawRef.f) {
|
||||
const existing = _isString ? refs[ref] : ref.value
|
||||
const existing = _isString
|
||||
? hasOwn(setupState, ref)
|
||||
? setupState[ref]
|
||||
: refs[ref]
|
||||
: ref.value
|
||||
if (isUnmount) {
|
||||
isArray(existing) && remove(existing, refValue)
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue