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

Uncaught Error: Cannot detect villus Client, did you forget #172

Open
cworkschris opened this issue Sep 13, 2022 · 4 comments
Open

Uncaught Error: Cannot detect villus Client, did you forget #172

cworkschris opened this issue Sep 13, 2022 · 4 comments

Comments

@cworkschris
Copy link

cworkschris commented Sep 13, 2022

to call useClient? Alternatively, you can explicitly pass a client as the manualClient argument.

To start off, thank you logaretm! Villus looks really cool and since apollo does not seem to work via cdn, it really keeps the spirit alive of vue usable for any size project.

I'm trying to do a minimal proof of concept, following along https://gitmemories.com/logaretm/villus
Maybe I'm getting access to villus in the most awkward way possible, but what happens is the useClient is called successfully in the mounted() handling, but on the clickLoad handler I get "vue.global.js:1414 Uncaught Error: Cannot detect villus Client, did you forget to call useClient? Alternatively, you can explicitly pass a client as the manualClient argument."

I haven't messed around with the manualClient because it seems like I must be doing something fundamentally wrong. Am I way off in the weeds here?

I looked at the two comments where you explained that it can only be used during a composition api setup call. Will this not work at all when using options? I see this true: #72 (comment)
Oddly, even when I move over to composition api and use the <script setup> I'm still having this same problem. I can't find anything manualClient either.

@logaretm
Copy link
Owner

logaretm commented Sep 17, 2022

I checked your earlier snippets and there is an issue with it:

function mounted() {
 // too late to call this
  useClient({
    url: 'http://somemachine.local:8000/graphql',
  });
}

Instead, add a setup function and call it there on your app component:

const app = createApp({
  setup() {
    useClient({
      url: 'http://somemachine.local:8000/graphql',
    });
  }
}

It should work fine with the options API as it is just additive. I will probably need to add examples with the options API usage but it would be very limited.

@cworkschris
Copy link
Author

cworkschris commented Sep 22, 2022 via email

@logaretm
Copy link
Owner

Sorry for the late response. Perhaps there are a couple of Vue installations competing here. Can you create a minimal repo for it where this happens?

@dydacki
Copy link

dydacki commented Aug 12, 2024

Hi,

I know it's been quite late but I have been encountering this error in Vue3 with composition API again. Mounting a component using the client like below
return mount(IbmMqPage, { attachTo: document.body, global: { plugins: [ToastService, PrimeVue, router], provide: { // @ts-ignore the computed property type as it is needed to properly inject the web client [VILLUS_CLIENT]: createClient({ url: 'https://localhost:8091/graphql', }), }, stubs: { transition: false, // added due to a bug in vue-test-utils: https://github.com/vuejs/test-utils/issues/2430 Toast: true, sync: false, }, components: { InputText, MultiSelect, }, }, }); };
worked like a charm in one component, but failed in another. Services using Villus look almost identical for both components, the only differences are in naming of their functions.

Any ideas?

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

No branches or pull requests

3 participants