vue icon indicating copy to clipboard operation
vue copied to clipboard

fix: vue2.7 use readonly on frozen object causeing error

Open xiaxzp opened this issue 2 years ago • 0 comments

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:

  • [ ] It's submitted to the dev branch for v2.x (or to a previous version branch), not the master 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)
  • [ ] 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:

fix #12799

problem: [Vue warn]: Error in setup: "TypeError: Cannot define property __v_rawToReadonly, object is not extensible" TypeError: Cannot define property __v_rawToReadonly, object is not extensible

demo: https://codesandbox.io/s/vue-2-7-v-rawtoreadonly-demo-10ix10?file=/src/App.vue

reason: Readonly function sets new property on object recursively. This may cause this error when meeting frozen variables. Ofcourse this error can also happen when using readonly directly on frozen objects.

solvement: This fix can simply solve the issue by checking the extensibility of target, and keep the temp proxy at the same time, but leaving existing proxy cache useless. The main reason is the "isReadonly" judgement, but it's difficult to change this basic feature, and the frozen target may still contain not frozen things? As this case may happen rarely, this fix is enough now and willing for future improvements.

xiaxzp avatar Sep 21 '22 08:09 xiaxzp