bhoriuchi / vue-deepset

Deep set Vue.js objects
MIT License
92 stars 4 forks source link

Not compatible with Vue 3 #15

Open JamesPoel opened 2 years ago

JamesPoel commented 2 years ago

.use(VueDeepSet) fires the exception:

app.js:43224 Uncaught (in promise) TypeError: Cannot set properties of undefined (setting '$deepModel')

window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

import BootstrapVue3 from 'bootstrap-vue-3';

import {createApp, h} from 'vue';
import {createInertiaApp} from '@inertiajs/inertia-vue3';

import * as VueDeepSet from 'vue-deepset';

createInertiaApp({
    resolve: name => require(`./Pages/${name}`),
    setup({el, App, props, plugin}) {
        createApp({render: () => h(App, props)})
            .use(plugin)
            .use(BootstrapVue3)
            .use(VueDeepSet)
            .mount(el)
    },
});
JamesPoel commented 2 years ago

Replacing:

export function install (VueInstance) {
    VueInstance.prototype.$deepModel = deepModel
    VueInstance.prototype.$vueSet = vueSet
    VueInstance.prototype.$vuexSet = vuexSet
}

with:

export function install (VueInstance) {
    VueInstance.config.globalProperties.$deepModel = deepModel;
    VueInstance.config.globalProperties.$vueSet =  vueSet;
    VueInstance.config.globalProperties.$vuexSet = vuexSet;
}

Seems to get the plugin semi-working with Vue3 (although probably isn't backwards-compatible with 1/2), however the plugin also uses Vue.set which is defunct as of Vue3.

ReynerHL commented 2 years ago

@JamesPoel Perhaps this is not the right place for asking something like this, but I'm curious.

Are you using vue-deepset for state management support (Vuex with esteroids) ?

In case this is true, If you are using Inertia, why are you needing and state management layer ?

Please, don't get me wrong, I just want to know because your proposal seems very interested to my.