Closed waldi closed 2 years ago
I just noticed the same.
This is related to https://github.com/vuejs/core/pull/5417 and the release of vue v3.2.32 https://github.com/vuejs/core/releases/tag/v3.2.32
Relevant Log Output in debug mode:
TypeError: Cannot read properties of undefined (reading 'accessCache')
at Object.defineProperty (runtime-core.esm-bundler.js:6823:1)
at Function.defineProperty (<anonymous>)
at injectProp (inject-obj-prop.js:2:10)
at use_validate (use-validate.js:210:13)
at use_field (use-field.js:173:7)
at setup (QInput.js:395:30)
at callWithErrorHandling (runtime-core.esm-bundler.js:155:1)
at setupStatefulComponent (runtime-core.esm-bundler.js:7072:1)
at setupComponent (runtime-core.esm-bundler.js:7028:1)
at mountComponent (runtime-core.esm-bundler.js:4937:1)
And its not vite related, same behaviour in webpack
Every vue
dependency in project is added with a caret, meaning if you run npm i vue
it should, technically, install proper patch version and fix problem.
https://stackoverflow.com/a/22345808
^version **Compatible with version,** will update you to all future minor/patch versions,
without incrementing the major version. ^2.3.4 will use releases from 2.3.4 to <3.0.0.
@MilosPaunovic that's not the solution, that's the problem in this case. the latest patch version breaks the build.
Ohh, sorry, ignore my comment from above in that case.
What you could to is downgrade Vue version manually until they release a fix with a npm i vue@3.2.31
or last one that worked for you.
Same problem here, thanks for the fix instruction. Fixing the npm version of vue to 3.2.31
solved the problem!
I have the same problem on prod, but on localhost quasar dev and quasar build works fine - no error
@MilosPaunovic thank you, downgrade to vue 3.2.31 solved the problem.
I have the same problem! thank you!!
May be related going from 3.2.31 to 3.2.32 also using Quasar with VUE CLI.
Ripple.js:65 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'config') at updateModifiers (Ripple.js:65:31) at beforeMount (Ripple.js:112:1) at callWithErrorHandling (runtime-core.esm-bundler.js:155:1) at callWithAsyncErrorHandling (runtime-core.esm-bundler.js:164:1) at invokeDirectiveHook (runtime-core.esm-bundler.js:3753:1) at mountElement (runtime-core.esm-bundler.js:4651:1) at processElement (runtime-core.esm-bundler.js:4581:1) at patch (runtime-core.esm-bundler.js:4501:1) at ReactiveEffect.componentUpdateFn [as fn] (runtime-core.esm-bundler.js:5052:1) at ReactiveEffect.run (reactivity.esm-bundler.js:185:1)
This happens to UMD as well. All input elements are not rendered. Error in console:
TypeError: can't access property "accessCache", e.$ is undefined
To fix, specify the specific ver:
<script src="https://cdn.jsdelivr.net/npm/vue@3.2.31/dist/vue.global.prod.js"></script>
Patch version of Vue, 3.2.33
is released with a solution to this problem. Anyone stumbling upon it should run npm i vue
to get the newest version.
May be related going from 3.2.31 to 3.2.32 also using Quasar with VUE CLI.
Ripple.js:65 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'config') at updateModifiers (Ripple.js:65:31) at beforeMount (Ripple.js:112:1) at callWithErrorHandling (runtime-core.esm-bundler.js:155:1) at callWithAsyncErrorHandling (runtime-core.esm-bundler.js:164:1) at invokeDirectiveHook (runtime-core.esm-bundler.js:3753:1) at mountElement (runtime-core.esm-bundler.js:4651:1) at processElement (runtime-core.esm-bundler.js:4581:1) at patch (runtime-core.esm-bundler.js:4501:1) at ReactiveEffect.componentUpdateFn [as fn] (runtime-core.esm-bundler.js:5052:1) at ReactiveEffect.run (reactivity.esm-bundler.js:185:1)
Also getting this even after upgrading to 3.2.33 (Qusar + Vite) So it is probably a bit different problem.
Patch version of Vue,
3.2.33
is released with a solution to this problem. Anyone stumbling upon it should runnpm i vue
to get the newest version.
Worked for me. Thank you. I got the error using webpack.
May be related going from 3.2.31 to 3.2.32 also using Quasar with VUE CLI. Ripple.js:65 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'config') at updateModifiers (Ripple.js:65:31) at beforeMount (Ripple.js:112:1) at callWithErrorHandling (runtime-core.esm-bundler.js:155:1) at callWithAsyncErrorHandling (runtime-core.esm-bundler.js:164:1) at invokeDirectiveHook (runtime-core.esm-bundler.js:3753:1) at mountElement (runtime-core.esm-bundler.js:4651:1) at processElement (runtime-core.esm-bundler.js:4581:1) at patch (runtime-core.esm-bundler.js:4501:1) at ReactiveEffect.componentUpdateFn [as fn] (runtime-core.esm-bundler.js:5052:1) at ReactiveEffect.run (reactivity.esm-bundler.js:185:1)
Also getting this even after upgrading to 3.2.33 (Qusar + Vite) So it is probably a bit different problem.
Mee too, but i use @quasar/vite-plugin
I'm still getting the same Ripple.js error mentioned by others, it seems related. Works in vue 3.2.31, errors in 3.2.32 and 3.2.33
Debugging, it appears that instance.$q
is undefined on some early calls, but then becomes defined after some ticks.
I'm still getting the same Ripple.js error mentioned by others, it seems related. Works in vue 3.2.31, errors in 3.2.32 and 3.2.33
Debugging, it appears that
instance.$q
is undefined on some early calls, but then becomes defined after some ticks.
Same, still erroring on 3.2.33 for Ripple.js
I experience the same issue with v-ripple
directive
Uncaught TypeError: instance.$q is undefined
updateModifiers Ripple.js:65
const cfg = Object.assign({}, instance.$q.config.ripple, modifiers, value)
Latest changes in Vue: https://github.com/vuejs/core/commit/f641c4b2289dfdbbbea87538e36fa35f2a115ddc
@rstoenescu, please consider reopening it until the fix is confirmed, because those who use v-ripple
get unhandled error that terminates the program
vue 3.2.33 still have this error,when use script-setup
I ran git bisect on the vue
repo and found this is the commit that broken ripple https://github.com/vuejs/core/commit/f44087e171282cb77f1e23d86516a527e4c5804b
The instance getting passed by invokeDirectiveHook
is now a proxy object with only the component's exposed
field instead of everything in the original ComponentPublicInstance
. This means the $q
set on app.config.globalProperties
is no longer available. This seems intentional as the docs say components using <script setup>
are closed by default (https://vuejs.org/api/sfc-script-setup.html#defineexpose).
This means I have to explicitly run this code in my components that are using the v-ripple
directive to expose the $q
object
<script lang="ts" setup>
const $q = useQuasar()
defineExpose({
$q,
})
</script>
@Trinovantes Great observation. This really seems like a core of the issue. But I doubt this is intentional. What is the point of globalProperties
if they are not exposed by default ?
@Liwoj globalProperties are discouraged, they were mostly a tool to migrate from vue 2 to vue 3 easily and it's only meant for option api components, because in vue3 everything global was phased out and setup components should indeed be closed
So what quasar should do in this case is use provide
inject
, which is the recommended way to provide this kind of features with composables
But it doesn't seem to be possible to do within directives yet https://github.com/vuejs/core/issues/5002
it works now after I degrade vue to 3.2.26
Hello, I also had these problems. When I downgraded, it started working fine.
FWIW...
According to the ripple effects docs It seems that using v-ripple
directive on any component that already has ripple
baked causes the issue, but for me that wasn't enough. Removing the v-ripple
directive entirely from every component that used it actually fixed the issue for me.
Example: q-item uses the v-ripple directive without ripple being baked in, but the same issue occurs unless v-ripple is removed.
FWIW...
According to the ripple effects docs It seems that using
v-ripple
directive on any component that already hasripple
baked causes the issue, but for me that wasn't enough. Removing thev-ripple
directive entirely from every component that used it actually fixed the issue for me.Example: q-item uses the v-ripple directive without ripple being baked in, but the same issue occurs unless v-ripple is removed.
I removed the ripple directive and it works fine now.
With the v-ripple
directive issue. From comments, there are 3 immediate work around:
vue 3.2.31
vue ^3.2.33
, that is now the recommended. Since latest update on vue, the developer need to explicit defineExpose({ $q })
on <script setup>
on components using v-ripple
.v-ripple
on your components 😢.But I like to propose to another temporary solution:
Ripple.js:65 => const cfg = Object.assign({}, instance?.$q?.config?.ripple, modifiers, value)
.I'm have created a PR proposing this change.
There is still the issue with vue ^3.2.33
not injecting $q
and losing quasar.config
, that need another workaround than defineExpose
, but when this issue go fix, the optional chaining will be still valid.
There is still the issue with vue 3.2.34
"vue": "^3.2.35" still not solved.
Same problem here using the v-ripple directive. If I remove it the script setup works fine.
Vue: 3.2.36 Quasar: 2.7.1
I'm still using Vue 3.2.31
without problems. Quasar 2.7.1
😢
We too with the problem 'undefined (reading 'accessCache')' Yes it is a big problem. No q-input text fields can be seen/visible in any FORM in Android, but ordinary html <input fields are visible. I changed the latest quasar, I meant changed the package.json to "vue": "3.2.31" and everything works fine! Very surprised
I've started from the repro repo provided. From 3.2.33
onwards the issue no longer occurs. As @MilosPaunovic mentioned on 14th of april, this is the patch version that fixes the problem mentioned in this issue.
This issue can be closed.
The people having issues with v-ripple
directive should create a repro repo with the exact steps to trigger the issue. Adding v-ripple
on a div in this repo with Vue on version 3.2.33+ doesn't have an error.
@rstoenescu Why was this issue closed? The issue is clearly NOT fixed.
I made a reproducible repo, created via quasar-cli, where I simply modified the MainLayout.vue file with a q-list and q-item elements with the v-ripple
applied. That page crashes with the error TypeError: Cannot read properties of undefined (reading 'config')
. Removing the v-ripple
directive of all elements resolves the issue (but no more ripple effect).
https://github.com/NGPixel/broken-quasar-vripple-proof
Your own docs provide examples with the v-ripple on q-item elements so I would expect this to work just fine with the latest version, but it does not.
@rstoenescu I second that it's premature to close this issue as it continues to persist for me as well with vue 3.2.32-3.2.37.
The original issue isn't about v-ripple. Using the reproduction repo provided, the issue of this issue is fixed from 3.2.33 onwards. Also, in the reproduction repo v-ripple does work. But v-ripple wasn't mentioned once, q-input in a build version was the issue.
If you have a different issue, then please do make a reproduction repo and create a separate issue such that that error can be investigated/fixed.
I stand by the statement that the logged issue, is fixed in 3.2.33 and higher.
As for the v-ripple issue (that is not part of the original logged issue), a workaround is posted in this response.
That's understandable except there have been numerous other issues about this issue vis v-ripple that have been closed in favor of or merged into this one.
https://github.com/quasarframework/quasar/issues/13681 https://github.com/quasarframework/quasar/issues/13488 https://github.com/quasarframework/quasar/issues/13242 https://github.com/quasarframework/quasar/issues/13213
@bartduisters Other tickets that were opened mentioning v-ripple were closed as duplicates of this issue. Apart from the other linked tickets, ripple is mentioned 42 times in this issue, just not in the initial report description.
The other tickets should be re-opened if they truly aren't duplicates, even though it's the same exact error.
Then please add the workaround to the docs so that we don't have to go through 10s of various issues that incorrectly links to each other.
Anyone trying to use v-ripple with vue 3 composition API will run into this issue and it's really not obvious what the solution is, even after going through all these posts.
For anyone landing on this issue and have the v-ripple problem when using <script setup>
:
<script setup>
import { useQuasar } from 'quasar'
const $q = useQuasar()
defineExpose({ $q })
To me it's clear that this is not a duplicate (since this issue is fixed, and the v-ripple clearly isn't), at the point the others were closed in favor of this one, it was perhaps not that clear.
I looked into the repro repo and the logged issue and wasn't able to reproduce in 3.2.33 - hence, my suggestion to close.
I'm in favor of having a clear new issue with a repro repo for the v-ripple issue, which has the workaround mentioned on top. That way people don't have to scroll, the workaround is on the relevant issue right on top.
As for the docs, you can pull request the workaround at the spot you think it fits. Then the team with merge permission can merge.
Indeed as @NGPixel mentions, the workaround provided by @Trinovantes here works for the v-ripple issue until a real fix is available.
Opened #13732 for the v-ripple issue.
What happened?
As a developer that uses quasar using the Vite plugin When building a project that contains a quasar input component And previewing the build using
npm run preview
Then Vue throws an errorCannot read properties of undefined (reading 'accessCache')
You can find a codesandbox with the final build assets here: https://codesandbox.io/s/frosty-thunder-gxs0pt?file=/index.html
What did you expect to happen?
No error to happen in the final build
Reproduction URL
https://github.com/waldi/quasar-access-cache-bug
How to reproduce?
You can use the reproduction repo or create a new project from scratch:
q-input
component:Additional context
This bug seems to be related to the Vue version. If you fix the vue version in the
package.json
to:"vue": "3.2.25"
then everything works fine.