3

我已经调整了react-dnd 可排序示例以在我的应用程序内部使用。

我无法使“不透明”跟随我的阻力。

当我最初选择元素时应用不透明度:

开始拖动

但是当我向上移动它以改变位置时,不透明度仍然应用于原始 DOM 元素(?)。

拖动时在元素上移动

状态相应更改,表中与此状态关联的列正在重新排序。因此,除了不透明度之外,其他一切都运行良好。

当我移动元素时,只有 li 的值正在改变,但data-reactid位置没有改变。

在此处输入图像描述

我的应用程序中唯一的区别是我管理状态的方式。在我的应用程序中,状态是通过 redux 管理的。

传递给 DropTarget的hover函数基本上是示例中的复制和粘贴。

SortableColumnEntry 组件:

class SortableColumnEntry extends Component {
  render(){
    const { connectDragSource, connectDropTarget } = this.props
    const { column, isDragging, index } = this.props

    const opacity = isDragging ? 0 : 1

    const element = connectDropTarget(connectDragSource(
      <li
        style={{opacity: opacity}}</li>
    ))

    return element
  }
}

export default flow(
  DragSource(DragTypes.COLUMN, source, (connect, monitor) => ({
    connectDragSource: connect.dragSource(),
    isDragging: monitor.isDragging()
  })),
  DropTarget(DragTypes.COLUMN, target, (connect) => ({
    connectDropTarget: connect.dropTarget()
  }))
)(SortableColumnEntry)
4

1 回答 1

8

好的,我终于整理好了。

key我从父组件传入的值有问题。

我曾经将其key基于随元素变化的索引。

这就是我以前的做法:

const columnTags = columns.map(
  (column, index) => 
    <SortableColumnEntry 
    key={index} 
    index={index}
    column={column} />)

当我将其更改为保持唯一并与状态相关联时:

const columnTags = columns.map(
  (column, index) => 
    <SortableColumnEntry 
      key={column} 
      index={index}
      column={column} />)

这一切都开始起作用了。

目前这些column值是唯一的并且与单个条目相关联 - 稍后将id字段添加到状态会很好。

于 2015-11-15T22:40:28.673 回答