我需要将可拖动的div添加到容器中,每个div对应一个图像数组中的每个图像.

下面的方法适用于第二次拖动.i、 e.我必须拖动组件两次,使其移动.这显然与使用的钩子以及div的创建方式有关.任何帮助都将不胜感激.

Code sandbox

const App = ({images}) => {
  const [selectedImages, setSelectedImages] = useState(images)
  const [dragId, setDragId] = useState()

  const handleDrag = (ev) => {
    setDragId(ev.currentTarget.id)
  }

  const handleDrop = (ev) => {
    const sortedImages = sortImages(selectedImages, dragId)
    setSelectedImages(sortedImages)
  }

  return (
    <Container
      images={selectedImages}
      handleDrag={handleDrag}
      handleDrop={handleDrop}
    />
  )
}

export default App

const Container = ({ images, handleDrag, handleDrop }) => {
  const ref = useRef(null)

  useEffect(() => {
    if (containerRef.current) {

      for (let i = 0; i < images.length; ++i) {
        const draggable = document.createElement('div')
        draggable.ondragstart = handleDrag
        draggable.ondrop = handleDrop

        const style = 'position: absolute; ...'

        draggable.setAttribute('style', style)
        draggable.setAttribute('draggable', true)
        draggable.setAttribute('id', images[i].id)

        ref.current.appendChild(draggable)
      }
    }
  }, [images, ref, handleDrag, handleDrop])


  return (
    <div className={'relative'}>
      <div ref={ref} />
    </div>
  )
}

export default Container

看起来它是在第一次拖动时设置dragId,然后只有在第二次拖动时才实际拖放div.我如何设置它,使其在第一次try 时拖放?

推荐答案

我应该用React来添加函数

const Container = ({ images, handleDrag, handleDrop }) => {
  const containerRef = useRef(null)
  
  return (
    <div ref={containerRef}>
      {images.map((image) => (
        <div
          key={image.id}
          id={image.id}
          draggable
          onDragOver={(ev) => ev.preventDefault()}
          onDrop={handleDrop}
          onDragStart={handleDrag}
          style={{
            position: 'absolute'...`,
          }}
        />
      ))}
    </div>
  )
}

export default Container

Sandbox

Javascript相关问答推荐

JavaScript Date对象在UTC中设置为午夜时显示不正确的日期

RxJS setTimeout操作符等效

Klaro与Angular的集成

提交表格后保留Web表格中的收件箱值?

使用续集和下拉栏显示模型属性

如何用拉威尔惯性Vue依赖下拉?

简单的PayPal按钮集成导致404错误

用于编辑CSS样式的Java脚本

我怎么才能得到Kotlin的密文?

Chart.js-显示值应该在其中的引用区域

在使用位板时,如何在Java脚本中判断Connect 4板中中柱的对称性?

Vaadin定制组件-保持对javascrip变量的访问

向数组中的对象添加键而不改变原始变量

一个实体一刀VS每个实体多刀S

如何利用CSS中的隐藏元素实现平滑扩展和防止网格行间隙

更新Redux存储中的对象数组

使用自动识别发出信号(&Q)

将范围 Select 器添加到HighChart面积图

FileReader()不能处理Firefox和GiB文件

输入数据覆盖JSON文件