SortableJS / vue.draggable.next

Vue 3 compatible drag-and-drop component based on Sortable.js
https://sortablejs.github.io/vue.draggable.next/#/simple
MIT License
3.77k stars 517 forks source link

TypeError: Cannot set properties of null (setting '__draggable_context') #140

Open keziakoko opened 2 years ago

keziakoko commented 2 years ago

Hello,

I am getting the following error when my page loads:

TypeError: Cannot set properties of null (setting '__draggable_context')
    at addContext (node_modules\vuedraggable\dist\vuedraggable.umd.js:4478:1)
    at eval (node_modules\vuedraggable\dist\vuedraggable.umd.js:4523:1)
    at Array.forEach (<anonymous>)
    at ComponentStructure.updated (node_modules\vuedraggable\dist\vuedraggable.umd.js:4522:1)
    at Proxy.updated (node_modules\vuedraggable\dist\vuedraggable.umd.js:4829:1)
    at callWithErrorHandling (node_modules\@vue\runtime-core\dist\runtime-core.esm-bundler.js:155:1)
    at callWithAsyncErrorHandling (node_modules\@vue\runtime-core\dist\runtime-core.esm-bundler.js:164:1)
    at Array.hook.__weh.hook.__weh (node_modules\@vue\runtime-core\dist\runtime-core.esm-bundler.js:2685:1)
    at flushPostFlushCbs (node_modules\@vue\runtime-core\dist\runtime-core.esm-bundler.js:356:1)
    at flushJobs (node_modules\@vue\runtime-core\dist\runtime-core.esm-bundler.js:401:1)

I cannot drag anything, when I try to drag I get the following error:

node_modules\vuedraggable\dist\vuedraggable.umd.js:4974 Uncaught TypeError: Cannot read properties of null (reading 'index')
    at Proxy.onDragUpdate (node_modules\vuedraggable\dist\vuedraggable.umd.js:4974:1)
    at Proxy.eval (node_modules\vuedraggable\dist\vuedraggable.umd.js:4694:1)
    at Sortable.eval (node_modules\vuedraggable\dist\vuedraggable.umd.js:4705:1)
    at dispatchEvent (node_modules\sortablejs\modular\sortable.esm.js:916:1)
    at _dispatchEvent (node_modules\sortablejs\modular\sortable.esm.js:961:1)
    at Sortable._onDrop (node_modules\sortablejs\modular\sortable.esm.js:2216:1)
    at Sortable.handleEvent (node_modules\sortablejs\modular\sortable.esm.js:2269:1)
    at Sortable.__trace__ [as handleEvent] (node_modules\@bugsnag\browser\dist\bugsnag.js:2764:1)

I have tried downgrading to versions 4.0.1 as well as version 4.0.0 and both still throw the error. This is my component:

<draggable item-key="id" v-model="person" handle=".gripIcon" @start="drag=true" @end="drag=false" tag="transition-group" :component-data="{name:'flip-list'}">
    <template #item="{element,index}">
        <component :is="element.name" :id="element.id"
                   v-bind:key="element.id"
                   v-on:delete-row="deleteRow(index)"
                   v-on:update-info="data => updateInfo(index,data)">
        </component>
    </template>
</draggable>

Please assist.

JokerMartini commented 2 years ago

This issue is never ending what is this? I get this issue all the time now??? This has broken the app completely. Hopefully this is resolved soon.

JokerMartini commented 2 years ago

I noticed the authors own code examples don't even work. I think he needs to update them.

superchangme commented 2 years ago

man,i have same question with you,but it may be not Stable Recurrence,Have you solved it?

superchangme commented 2 years ago

I noticed the authors own code examples don't even work. I think he needs to update them.

Do you use vite ?

JokerMartini commented 2 years ago

They don't work with vite or webpack

superchangme commented 2 years ago

They don't work with vite or webpack

what a pity,i remove tag="transition-group"

keziakoko commented 2 years ago

I have not solved it, it is still happening. I do not use vite.

keziakoko commented 2 years ago

Removing the tag="transition-group" worked for me. I no longer get the error. Kinda sad though cause now there's no more smooth transitions when dragging and swapping items!

JokerMartini commented 2 years ago

in order to work you have to downgrade your vue and that solves it. go to 3.2.30

keziakoko commented 2 years ago

Currently running vue version 3.0.0. We have not upgraded it yet.

JokerMartini commented 2 years ago

if that is the case im not sure why it's broken on your end.

redrbrt commented 2 years ago

Same error for me, i couldn't make it run with tag="transition-group" (vite, vue 3, typescript) by following the simple code example guide, i decided to switch the SortableJS vanilla version, hope could it be fixed, thank you!

gbaggaley commented 2 years ago

Not working for me either, I'm using Vue 3.2.33.

Draggable works fine without the transition on it, but I'm getting the same error as soon as I add tag="transition-group"

hooray commented 2 years ago

Will the official fix this problem? I see that the last version is still released in 2020

mreduar commented 2 years ago

This error did not happen to me before and started to happen when I performed an npm update. The error was fixed by setting vue to version 3.2.30 currently 3.2.33 "vue": "3.2.30",

tujianglin commented 2 years ago

Can you use version 3.2.30 without errors

Seuthes commented 2 years ago

There seems to be a pull request #145 with a fix for this issue. I hope there will be soon a release with it.

JokerMartini commented 2 years ago

I don't know of the dev works on the repo anymore

On Wed, May 11, 2022, 7:32 AM Seuthes @.***> wrote:

There seems to be a pull request #145 https://github.com/SortableJS/vue.draggable.next/pull/145 with a fix for this issue. I hope there will be soon a release with it.

— Reply to this email directly, view it on GitHub https://github.com/SortableJS/vue.draggable.next/issues/140#issuecomment-1123622724, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAKZ4LI65QPVIA4BMKQOTYDVJOLEHANCNFSM5UIF3DTQ . You are receiving this because you commented.Message ID: <SortableJS/vue. @.***>

hooray commented 2 years ago

I don't know of the dev works on the repo anymore On Wed, May 11, 2022, 7:32 AM Seuthes @.> wrote: There seems to be a pull request #145 <#145> with a fix for this issue. I hope there will be soon a release with it. — Reply to this email directly, view it on GitHub <#140 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAKZ4LI65QPVIA4BMKQOTYDVJOLEHANCNFSM5UIF3DTQ . You are receiving this because you commented.Message ID: <SortableJS/vue. @.>

I think the official has given up this repo, so we're on our own. maybe we need to migrate to the original sortable.js

GAtomis commented 2 years ago

This is a helpless choice. I have to reduce my version. I still hope to use vue-core@next as soon as possible

hellozhaoxudong commented 2 years ago

我使用了: "vue": "^3.2.25" "vite": "^2.8.0" "vuedraggable": "^4.1.0"

近期重新install或update后发现了bug,通过移除 tag="transition-group" 后解决了此问题

shenjilina commented 2 years ago

remove tag="transition-group"

hooray commented 2 years ago

我使用了: "vue": "^3.2.25" "vite": "^2.8.0" "vuedraggable": "^4.1.0"

近期重新install或update后发现了bug,通过移除 tag="transition-group" 后解决了此问题

不能说解决吧,只能说用这个办法可以通过移除特性的方式避开这个 bug ,我觉得如果这个仓库官方不打算维护了,将 vue-draggable 替换为 sortable 才是最合适的方案,因为 vue-draggable 内核也是基于 sortable 开发的

MaxLeiter commented 2 years ago

I was having this same issue and published a thin wrapper around sortablejs that seems to work more consistently. Feel free to try it out and leave feedback at https://github.com/MaxLeiter/sortablejs-vue3.

FeckNeck commented 2 years ago

@MaxLeiter Was having the exact same issue so I tried out your library. Unfortunately I got this issue when I try to use it :


runtime-core.esm-bundler.js?9d6a:2948 Uncaught (in promise) TypeError: Cannot read properties of null (reading 'isCE')
    at renderSlot (runtime-core.esm-bundler.js?9d6a:2948:1)
    at eval (sortablejs-vue3.es.js?e663:76:1)
    at renderList (runtime-core.esm-bundler.js?9d6a:2879:1)
    at eval (sortablejs-vue3.es.js?e663:74:1)
    at normalizeChildren (runtime-core.esm-bundler.js?9d6a:6946:1)
    at createBaseVNode (runtime-core.esm-bundler.js?9d6a:6699:1)
    at _createVNode (runtime-core.esm-bundler.js?9d6a:6801:1)
    at createVNodeWithArgsTransform (runtime-core.esm-bundler.js?9d6a:6657:1)
    at createBlock (runtime-core.esm-bundler.js?9d6a:6632:1)
    at Proxy.eval (sortablejs-vue3.es.js?e663:69:1)
MaxLeiter commented 2 years ago

@FeckNeck open an issue there please

ceciogit commented 1 year ago

Guys.. for me its working with simply removing tag="transition-group" and using v-bind="dragOptions"

computed:{
    dragOptions() {
        return {
            animation: 250,
            group: "people",
            disabled: false,
            ghostClass: "ghost"
        };
    },
}

after that remember remove any transitions effect you have in your css for the dragged element.

usmanlogin commented 1 year ago

Guys.. for me its working with simply removing tag="transition-group" and using v-bind="dragOptions"

computed:{
    dragOptions() {
        return {
            animation: 250,
            group: "people",
            disabled: false,
            ghostClass: "ghost"
        };
    },
}

after that remember remove any transitions effect you have in your css for the dragged element.

Thanks @ceciogit This also worked for me 👍

Liberty-liu commented 1 year ago

Hi guys, this is how I solved it, but need to change the source code, but there will be [Vue warn]: children must be keyed. But don't add key. For now, let's do that. We need to change another way of thinking to solve this problem, such as not using vue version to develop

before:`  const defaultNodes = normalizedList.flatMap((element, index) =>
    item({ element, index }).map(node => {
      node.key = getKey(element);
      node.props = { ...(node.props || {}), "data-draggable": true };
      return node;
    })
  );`
after:`const defaultNodes = normalizedList.flatMap((element, index) =>
    item({ element, index }).map(node => {
      node.key = getKey(element);
      node.props = { ...(node.props || {}), "data-draggable": true };
      return cloneVNode(node);
    })
  );`
danielkellyio commented 1 year ago

I was able to get rid of the error by removing tag="transition-group" but still keep a nice transition by adding the prop :animation="150"

suterma commented 1 year ago

I can second @danielkellyio. I conclude that just the documentation is out of date.

I was working along the official example, and @danielkellyio's proposal fixed the issue for me. Not even any additional CSS transition styles are required with this solution. Probably the author made all that inline now.

For completeness, here is my current working state: https://github.com/suterma/replayer-pwa/blob/fe4e71f58c853a7f016ccee0056dd917c94882ef/src/views/Setlist.vue#L63

ddmy commented 1 year ago

Vue降级到3.2.30问题解决了。 vue.draggable.next好像不维护了,真是难搞

pingan8787 commented 1 year ago

Guys.. for me its working with simply removing tag="transition-group" and using v-bind="dragOptions"

computed:{
    dragOptions() {
        return {
            animation: 250,
            group: "people",
            disabled: false,
            ghostClass: "ghost"
        };
    },
}

after that remember remove any transitions effect you have in your css for the dragged element.

Thank you very much. It's very helpful.

joeqiao64 commented 1 year ago

Adding image.setInteractive()before this.input.setDraggable(image) worked for me.

leoboyerbx commented 1 year ago

Removing "transition-group" and usign animation prop works for having smooth transitions, yes. BUT if the data changes, (for example on a undo action), there is no animation. I'm going to try and make it work directly with vanilla sortableJS

andcl commented 1 year ago

Removing "transition-group" and usign animation prop works for having smooth transitions, yes. BUT if the data changes, (for example on a undo action), there is no animation. I'm going to try and make it work directly with vanilla sortableJS

Indeed

danielsussa commented 1 year ago

Created a simple PR, 3 lines... https://github.com/SortableJS/vue.draggable.next/pull/207

In my case, it´s necessary using tag="transition-group" ...

tvld commented 1 year ago

lousy, this issue persists in v4.1.0 and vue v3.2.47 ;

illusionno commented 7 months ago

Guys.. for me its working with simply removing tag="transition-group" and using v-bind="dragOptions"

computed:{
    dragOptions() {
        return {
            animation: 250,
            group: "people",
            disabled: false,
            ghostClass: "ghost"
        };
    },
}

after that remember remove any transitions effect you have in your css for the dragged element.

Thanks @ceciogit This also worked for me 👍

Guys.. for me its working with simply removing tag="transition-group" and using v-bind="dragOptions"

computed:{
    dragOptions() {
        return {
            animation: 250,
            group: "people",
            disabled: false,
            ghostClass: "ghost"
        };
    },
}

after that remember remove any transitions effect you have in your css for the dragged element.

Thanks @ceciogit This also worked for me 👍

This is setting an animation, but if one of the original elements is added, there is no transition