core icon indicating copy to clipboard operation
core copied to clipboard

fix(reactivity): trigger the ref that is created by toRef from a reactive array

Open noootwo opened this issue 1 year ago • 4 comments

fix #12427

noootwo avatar Nov 18 '24 11:11 noootwo

Open in Stackblitz

@vue/compiler-core

pnpm add https://pkg.pr.new/@vue/compiler-core@12431
@vue/compiler-sfc

pnpm add https://pkg.pr.new/@vue/compiler-sfc@12431
@vue/compiler-dom

pnpm add https://pkg.pr.new/@vue/compiler-dom@12431
@vue/compiler-ssr

pnpm add https://pkg.pr.new/@vue/compiler-ssr@12431
@vue/runtime-core

pnpm add https://pkg.pr.new/@vue/runtime-core@12431
@vue/reactivity

pnpm add https://pkg.pr.new/@vue/reactivity@12431
@vue/runtime-dom

pnpm add https://pkg.pr.new/@vue/runtime-dom@12431
@vue/server-renderer

pnpm add https://pkg.pr.new/@vue/server-renderer@12431
@vue/shared

pnpm add https://pkg.pr.new/@vue/shared@12431
vue

pnpm add https://pkg.pr.new/vue@12431
@vue/compat

pnpm add https://pkg.pr.new/@vue/compat@12431

commit: eccd16e

pkg-pr-new[bot] avatar Nov 18 '24 11:11 pkg-pr-new[bot]

Size Report

Bundles

File Size Gzip Brotli
runtime-dom.global.prod.js 100 kB (+43 B) 38 kB (+20 B) 34.2 kB (-26 B)
vue.global.prod.js 158 kB (+43 B) 57.8 kB (+21 B) 51.4 kB (-4 B)

Usages

Name Size Gzip Brotli
createApp (CAPI only) 47.2 kB 18.3 kB 16.8 kB
createApp 55.2 kB 21.3 kB 19.5 kB
createSSRApp 59.3 kB 23.1 kB 21 kB
defineCustomElement 60.1 kB 22.9 kB 20.8 kB
overall 69.1 kB 26.5 kB 24.1 kB

github-actions[bot] avatar Nov 18 '24 11:11 github-actions[bot]

According to the reproduction in #12427, the issue likely lies within toRef. If source is an array and the key is a number, the key should be converted to a string. However, modifying getDepFromRective broadens the impact scope. Additionally, getDepFromReactive is not a public API, and the test case should ideally use public APIs.

edison1105 avatar Nov 19 '24 03:11 edison1105

According to the reproduction in #12427, the issue likely lies within toRef. If source is an array and the key is a number, the key should be converted to a string. However, modifying getDepFromRective broadens the impact scope. Additionally, getDepFromReactive is not a public API, and the test case should ideally use public APIs.

But for getDepFromReactive, it should indeed exhibit such behavior, as it needs to handle this case for all reactive arrays.

noootwo avatar Nov 19 '24 03:11 noootwo