简单的列表在反应美丽的dnd不起作用

时间:2019-03-21 20:25:36

标签: reactjs react-dnd react-beautiful-dnd

我一直在遵循关于鸡蛋头的官方课程(https://egghead.io/lessons/react-reorder-a-list-with-react-beautiful-dnd和示例工作代码:https://codesandbox.io/s/52p60qqlpp)并撰写:

https://codesandbox.io/s/00k3rwq3qn

但是,它实际上并没有拖放。我已经浏览了几个示例,但在我的代码中找不到该问题。我真的很感谢有人反馈我的错误。

谢谢

3 个答案:

答案 0 :(得分:1)

@Ian的答案对我来说效果不佳。因此,我检查了react-beautiful-dnd's documents并提出了另一种解决方法来解决此问题:

const styles = {
  backgroundImage: `url(${background.MEDIUM})`,
  backgroundSize: 'cover',
};

...

  {(provided) => {
    const otherProps = {
      ...provided.draggableProps,
      style: {
        ...provided.draggableProps.style,
        ...styles,
      },
    };
    return (<div
        {...otherProps}
        {...provided.dragHandleProps}
        ref={provided.innerRef}
        >
        {this.props.task.content}
    </div>)
  }}

答案 1 :(得分:0)

我认为使用内联样式不能与Draggable中的react-beautiful-dnd一起使用。如果要将样式应用于Task组件,则应使用styled-components,此示例显示,如果删除了内联样式配置https://codesandbox.io/s/6lq0854m6r,则它可以正常工作。

而是使用样式化的组件

import React from "react";
import styled from "styled-components";
import { Draggable } from "react-beautiful-dnd";

const Container = styled.div`
  margin: 10px;
  border: 1px solid black;
`;

export default class Task extends React.Component {
  render() {
    return (
      <Draggable draggableId={this.props.task.id} index={this.props.index}>
        {(provided, snapshot) => (
          <Container
            {...provided.draggableProps}
            {...provided.dragHandleProps}
            ref={provided.innerRef}
          >
            {this.props.task.content}
          </Container>
        )}
      </Draggable>
    );
  }
}

编辑: 看来您可以将内联样式应用于可拖动对象,但是随后您应该在DraggableProps.styles组件的子功能中扩展Draggable,请参见here

{(provided, snapshot) => (
    const style = {
        margin: "10px",
        border: "1px solid black",
        ...provided.draggableProps.style,
    };
    return <div
        {...provided.draggableProps}
        {...provided.dragHandleProps}
        ref={provided.innerRef}
        style={style}
        >
        {this.props.task.content}
    </div>
)}

答案 2 :(得分:0)

如果您尝试使用官方文档而不是使用样式组件库使用 React 功能组件构建可拖动列表,那么它需要工作。它会给你一些错误。所以使用 className 属性应用样式,然后错误就会消失,代码也会开始工作。