I was hiding elements with classList={{ hidden: bool }}, so the droppables only show up once a draggable is picked up. The draggables didn't work though, because their layout is calculated onMount and was never updated when the element became visible. As a workaround I found either rendering the whole element on a condition or using visibility + pointer-event css over display: none.