【发布时间】:2021-01-08 08:34:40
【问题描述】:
我正在尝试在 react-data-grid 中实现 DnD 功能,但我得到了 "TypeError: Object(...) is not a function" Error。
TypeSript 中有我在沙盒中提供的相同文件(仅供参考)。我正在尝试在 React 中实现该功能,将 TS 代码转换为 React 代码时出现问题。
我正在使用react-data-grid ^7.0.0-canary.33。
<DndProvider backend={HTML5Backend}>
<DataGrid
rowRenderer={p => <DraggableRowRenderer {...p} onRowReorder={onRowReorder} />}
/>
</DndProvider>
// this is the component where the error is. I think I'm doing something wrong when typing react code(the orignal implementation is in TS)
import { useDrag, useDrop } from 'react-dnd';
import { Row } from 'react-data-grid';
import useCombinedRefs from 'react-data-grid';
// import { row } from 'react-dnd'
import clsx from 'clsx';
import './DraggableRowRenderer.less';
export default function DraggableRowRenderer({
rowIdx,
isRowSelected,
className,
onRowReorder,
...props}) {
const [{ isDragging }, drag] = useDrag({
item: { index: rowIdx, type: 'ROW_DRAG' },
collect: monitor => ({
isDragging: monitor.isDragging()
})
});
const [{ isOver }, drop] = useDrop({
accept: 'ROW_DRAG',
drop({ index, type }) {
if (type === 'ROW_DRAG') {
onRowReorder(index, rowIdx);
}
},
collect: monitor => ({
isOver: monitor.isOver(),
canDrop: monitor.canDrop()
})
});
className = clsx(
className,
{
'rdg-row-dragging': isDragging,
'rdg-row-over': isOver
}
);
return (
<Row
ref={useCombinedRefs(drag, drop)}
rowIdx={rowIdx}
isRowSelected={isRowSelected}
className={className}
{...props}
/>
);
}
【问题讨论】:
-
组件的导入是什么样子的?
-
@Cedervall 错误出现在最后 5 行(ref = {us...})。
-
@Cedervall 这是 sanbox 链接。 codesandbox.io/s/rdg-row-reorder-700-canary33-ed0mu 我还包含了我正在转换的打字稿文件。
-
@YashJaiswal 你如何在你的代码和框中复制错误?
-
@juliomalves 转到sanbox,取消注释 App.js 中的第 72-74 行。
标签: javascript reactjs typescript react-dnd react-data-grid