javascript - Kan inte hitta draggable med id: b7zc6
Hej, jag är ny på React och fastnat med ett problem med react-beautiful-dnd. Jag verkar ha konfigurerat enligt dokumentationen men står fortfarande inför detta konstiga problem relaterat till draggable id.
- gjorde draggableid som sträng
- angivet index som nummer
- tilldelad innerref korrekt
Men problemet kvarstår fortfarande. Behöver lite expert hjälp inom detta område.
CodeSandBox-länk: Länk till React Beautiful DnD Codesandbox problemkod
Lägger även till koden för en snabb översikt:
import "./styles.css";
import { DragDropContext, Draggable, Droppable } from "react-beautiful-dnd";
import { useState } from "react";
export default function App() {
const [list, setList] = useState(generateData());
const st = {
width: "300px",
cursor: "grab",
display: "flex",
gap: "10px",
flexDirection: "column"
};
const onDragEnd = (result) => {
if (result.destination) {
alert("drag successfull");
}
};
return (
<div className="App">
<h4>Test</h4>
<div>
<DragDropContext onDragEnd={onDragEnd}>
<Droppable droppableId="droppable">
{(provided) => (
<div
{...provided.droppableProps}
ref={provided.innerRef}
style={st}
className="work-parent"
>
<WorkList list={list} />
</div>
)}
</Droppable>
</DragDropContext>
</div>
</div>
);
}
function WorkList({ list }) {
return list.map((l, index) => <Work key={l.id} work={l} index={index} />);
}
function Work({ work, index }) {
const st = {
padding: "10px",
width: "100%",
color: "white",
backgroundColor: "purple",
width: "200px",
height: "50px"
};
return (
<Draggable draggableId={work.id} key={work.id} index={index}>
{(provided) => (
<div
ref={provided.innerRef}
{...provided.draggableProps}
{...provided.dragHandleProps}
style={st}
>
{work.title}
</div>
)}
</Draggable>
);
}
function generateData() {
const data = [];
for (let i = 0; i < 10; i++) {
data.push({
title: "Work - " + i,
id: makeid(5)
});
}
return data;
}
function makeid(length) {
var result = "";
var characters =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var charactersLength = characters.length;
for (var i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
Svar #1
Vid första anblicken är din kod korrekt. Problemet du stötte på handlar om att uppgradera till React v18. Som en tillfällig lösning kan jag råda dig att ta bort <StrictMode>-omslag och din app kommer att fungera.
Du kan hitta mer information om detta problem här: https://github.com/atlassian/react-beautiful-dnd/issues/2350
UPPDATERING :
Nedgradering till React v17 kan också hjälpa: https://github.com/atlassian/react-beautiful-dnd/issues/2407
UPPDATERING 2:
Jag har inte testat det själv men det verkar som att detta kan vara en lösning för att använda React v18 och inte ta bort <StrictMode>:https://github.com/atlassian/react-beautiful-dnd/issues/2399#issuecomment-1167427762