vue-social-sharing icon indicating copy to clipboard operation
vue-social-sharing copied to clipboard

Cannot read properties of undefined (reading 'Index')

Open ivsaneesh opened this issue 2 years ago • 8 comments

Version using is "vue-social-sharing": "^4.0.0-alpha4" "vue": "^3.2.47" "nuxt": "^3.3.1"

ivsaneesh avatar Mar 21 '23 13:03 ivsaneesh

same problem

valere-hope avatar Mar 25 '23 20:03 valere-hope

I got this problem as well. But I dont think it is an issue with vue-social-sharing. The nuxt support is for Nuxt 2 if I understand it correctly. In Nuxt 3 it is possible to simply register the Vue plugin directly:

Create a new file in the plugins folder. Register the vue-social-sharing plugin (not the vue-social-sharing/nuxt):

See: https://nuxt.com/docs/guide/directory-structure/plugins#vue-plugins

This will work: plugins/vue-social-sharing.client.js:

import VueSocialSharing from 'vue-social-sharing';
export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.vueApp.use(VueSocialSharing);
});

If using SSR make sure to wrap it in a ClientOnly tag to avoid it getting rendered twice.

<ClientOnly>
  <ShareNetwork
    network="twitter"
    url="https://news.vuejs.org/issues/180"
  >
    <span>Share on Twitter</span>
  </ShareNetwork>
</ClientOnly>

muzicaed avatar Apr 25 '23 22:04 muzicaed

@muzicaed get new error on this way. Cannot set properties of undefined (setting '$SocialSharing')

ifault avatar Apr 29 '23 15:04 ifault

@muzicaed get new error on this way. Cannot set properties of undefined (setting '$SocialSharing')

follow these steps:

Install the specified version by running either of the following commands:

Using Yarn: yarn add vue-social-sharing@next Using npm: npm install --save vue-social-sharing@next

Version to install: For Vue 3, Nuxt3: "vue-social-sharing": "^4.0.0-alpha4"

Utilize it as a plugin in Nuxt, rather than a module. If you encounter any issues, you can resolve them by creating a custom plugin. Follow these steps:

Create a new file in the "/plugins" directory named "vue-social-sharing.client.ts".

Insert the following content into the file:

import VueSocialSharing from "vue-social-sharing";

export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.vueApp.use(VueSocialSharing);
});

TheMukhtarAhmed avatar May 19 '23 09:05 TheMukhtarAhmed

Cannot read properties of undefined (reading 'Index')

I had this problem, too. If i don't add "vue-social-sharing/nuxt" line to nuxt.config.ts, it works. image

AndreaKocsis avatar Jul 07 '23 10:07 AndreaKocsis

If you see it: A plugin must either be a function or an object with an "install" function

Change vue-social-sharing.ts to this:

import VueSocialSharing from 'vue-social-sharing/src/vue-social-sharing'

export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.vueApp.use(VueSocialSharing)
})

AndreaKocsis avatar Jul 07 '23 11:07 AndreaKocsis

Cannot read properties of undefined (reading 'Index')

I had this problem, too. If i don't add "vue-social-sharing/nuxt" line to nuxt.config.ts, it works. image

in nuxt.config.js add vuesocialsharing in build transpile like below

build: { transpile: ["vuesocialsharing", ...], ... }

and create plugin vuesocialsharing.client.js just copy paste below code


import { defineNuxtPlugin } from "#app"; import VueSocialSharing from 'vue-social-sharing';

export default defineNuxtPlugin((nuxtApp) => { nuxtApp.vueApp.use(VueSocialSharing); });

TheMukhtarAhmed avatar Aug 08 '23 08:08 TheMukhtarAhmed

I got this problem as well. But I dont think it is an issue with vue-social-sharing. The nuxt support is for Nuxt 2 if I understand it correctly. In Nuxt 3 it is possible to simply register the Vue plugin directly:

Create a new file in the plugins folder. Register the vue-social-sharing plugin (not the vue-social-sharing/nuxt):

See: https://nuxt.com/docs/guide/directory-structure/plugins#vue-plugins

This will work: plugins/vue-social-sharing.client.js:

import VueSocialSharing from 'vue-social-sharing';
export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.vueApp.use(VueSocialSharing);
});

If using SSR make sure to wrap it in a ClientOnly tag to avoid it getting rendered twice.

<ClientOnly>
  <ShareNetwork
    network="twitter"
    url="https://news.vuejs.org/issues/180"
  >
    <span>Share on Twitter</span>
  </ShareNetwork>
</ClientOnly>

this is useful for me.

gspgsp avatar Mar 10 '24 15:03 gspgsp