Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
wants to merge 1 commit into from

Conversation

xiaxzp
Copy link

@xiaxzp xiaxzp commented Sep 21, 2022

What kind of change does this PR introduce? (check at least one)

  • Bugfix
  • Feature
  • Code style update
  • Refactor
  • Build-related changes
  • Other, please describe:

Does this PR introduce a breaking change? (check one)

  • Yes
  • No

If yes, please describe the impact and migration path for existing applications:

The PR fulfills these requirements:

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.

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 xiaxzp changed the title fix: vue2.7 use readonly on frozen object causeing error fix #12799: vue2.7 use readonly on frozen object causeing error Sep 21, 2022
@xiaxzp xiaxzp changed the title fix #12799: vue2.7 use readonly on frozen object causeing error fix: vue2.7 use readonly on frozen object causeing error Sep 21, 2022
@yyx990803 yyx990803 closed this in 4a0d88e Oct 11, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[2.7.10] readonly on frozen object causing TypeError: Cannot define property __v_rawToReadonly
1 participant