首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网格与SortableJS的结合

网格与SortableJS的结合
EN

Stack Overflow用户
提问于 2020-01-06 09:57:38
回答 1查看 1.1K关注 0票数 0

我将SortableJS用于React,并试图实现水平Grid,以便最终结果如下所示:

我设法做到了,但是排序函数根本不起作用。我认为这与tag属性有关。当我尝试tag={Grid}时,我得到以下错误:

排序:el必须是HTMLElement,而不是对象对象

有什么想法吗?如何将Grid实现到tag属性?这是我的代码:

代码语言:javascript
复制
     <Grid container>
            <Sortable options={{ fallbackOnBody: true, group: "items", handle: reorderHandle }} tag={Grid} onChange={handleChange}>
                {items.map((item, index) =>
                    <Paper key={index} data-id={index} className={classes.item} elevation={0}>
                        <ButtonHelper {...getHandleClass(editable)} key={index} icon={
                            <Badge badgeContent={index + 1} color="default">
                                {editable && <ReorderIcon />}
                            </Badge>}
                        />
                        <Grid item xs={4} key={index}>
                            <div className={classes.gridItem}>
                                <GalleryInput className={classes.image} style={{ width: '300px' }} label="image" source={`${source}[${index}].image`} />
                                <br></br>
                                <TextInput label="desc" source={`${source}[${index}].desc`} />
                                {editable && <ButtonHelper icon={<RemoveIcon />} onClick={handleRemove(index)} className={classes.left} />}
                            </div>
                        </Grid>
                    </Paper>
                )}
            </Sortable>
        </Grid>

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2020-01-06 10:42:43

由于您使用的是自定义组件,标记支柱只接受它为forwarRef组件。

所以你需要用那种方式更新。

示例片段

代码语言:javascript
复制
// This is just like a normal component, but now has a ref.
const CustomComponent = forwardRef<HTMLDivElement, any>((props, ref) => {
  return <div ref={ref}>{props.children}</div>;
});

export const BasicFunction: FC = props => {
  const [state, setState] = useState([
    { id: 1, name: "shrek" },
    { id: 2, name: "fiona" }
  ]);

  return (
    <ReactSortable tag={CustomComponent} list={state} setList={setState}>
      {state.map(item => (
        <div key={item.id}>{item.name}</div>
      ))}
    </ReactSortable>
  );
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59609973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档