vue
vue copied to clipboard
fix: diff of list [a,b,c,d] and [e,b,b,f],error happened and make vue-router cant update
What kind of change does this PR introduce? (check at least one)
- [x] Bugfix
- [ ] Feature
- [ ] Code style update
- [ ] Refactor
- [ ] Build-related changes
- [ ] Other, please describe:
Does this PR introduce a breaking change? (check one)
- [ ] Yes
- [x] No
If yes, please describe the impact and migration path for existing applications:
The PR fulfills these requirements:
- [x] It's submitted to the
main
branch for v2.x (or to a previous version branch) - [ ] When resolving a specific issue, it's referenced in the PR's title (e.g.
fix #xxx[,#xxx]
, where "xxx" is the issue number) - [x] All tests are passing: https://github.com/vuejs/vue/blob/dev/.github/CONTRIBUTING.md#development-setup
- [ ] New/updated tests are included
If adding a new feature, the PR's description includes:
- [ ] A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it)
Other information:
When updating an existing list, if the same key exists in the new list and the node with the same key value also exists in the old list, after diffing, it will be marked as undefined in oldCh, causing the new list with the same key to report an error in isSameNode (read 'key' from undefined)
At the same time, this issue also causes the vue router to be unable to jump normally, as the watcher updates when the "app. _route" changes. In the “watcher.run”, due to the execution error and capture of "this. getter. call (vm, vm)", the subsequent ”resetSchedulerState“ cannot be executed, and the "waiting" state remains true. Finally, the “registerInstance” cannot be executed. Although the URL is updated, the page cannot find “instances” and cannot be updated
test-demo vue2.7_bug-test.zip