nicolasbeauvais / vue-social-sharing

A renderless Vue.js component for sharing links to social networks, compatible with SSR
https://nicolasbeauvais.github.io/vue-social-sharing/
MIT License
1.39k stars 197 forks source link

Cannot read properties of undefined (reading 'Index') #338

Open ivsaneesh opened 1 year ago

ivsaneesh commented 1 year ago

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

valere-hope commented 1 year ago

same problem

muzicaed commented 1 year ago

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>
ifault commented 1 year ago

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

TheMukhtarAhmed commented 1 year ago

@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);
});
AndreaKocsis commented 1 year ago

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 commented 1 year ago

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)
})
TheMukhtarAhmed commented 1 year ago

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); });

gspgsp commented 6 months ago

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.