React-dnd с несколькими canDrops, разделенными через массив

Я работаю над созданием перетаскивания из одного контейнера div в другой. Он работает в нормальных условиях с приведенным ниже кодом, если я не разделяю область перетаскивания на отдельные блоки div. Однако это то, что мне нужно сделать, поэтому я скрываю div, которые являются шагами, а затем использую следующую предыдущую кнопку для их переключения, однако я не могу создать 4 отдельных dropzone, потому что это число может изменяться динамически.

Итак, мой вопрос в том, как я могу разделить секцию для сброса банок, чтобы сделать ее динамической на основе содержащегося в ней массива. Я в основном имею в виду область box.map, поскольку именно она генерирует результат при перетаскивании любых элементов, потому что у меня он содержится в другом массиве, но мне нужно, чтобы в этом сценарии было несколько CanDrops, их было бы 4, потому что stepBlock является равно 4, но я не уверен, как связать это с родительским массивом. Вот мой код:

 import { useDrag, useDrop, useDragLayer } from 'react-dnd'               
                
  let stepBlock = 4;

const ELEMENT = 'element';

const [{ isDragging }, drag, dragPreview] = useDrag(() => ({
    type: ELEMENT,
    collect: (monitor) => ({
    isDragging: monitor.isDragging()
    })
}))

const [{ canDrop, isOverCurrent }, drop] = useDrop({
    accept: 'element',
    canDrop: () => true,
    drop: item => {
    if (isOverCurrent) {
    setBoxes([...boxes, item]);
    }
    },
    collect: monitor => ({
    canDrop: monitor.canDrop(),
    isOverCurrent: monitor.isOver({ shallow: true })
    )
})

 <div className = {'StepContainer'}>

  <div className = {'stepControls'}>
      <div ref = {dragPreview} style = {{ opacity: isDragging ? 0.5 : 1}}>
           <div className='element' ref = {drag}>
      </div>          
   </div>
 </div>

{[...Array(stepBlock)].map((e, i) =>
<div key = {i} className = {`stepBlock ${i !== index ? "hidden" : ""}`}>
    {boxes.map(member => (
        <div className = "box">
        {member.name}
        </div>
    ))}
    <div className = {`drop-area ${canDrop ? 'highlight': ''}`} ref = {drop}>
    {canDrop ? 'Release to drop' : 'Drag a box here'}
    </div>
</div>
)}

</div>

<div className = {'toggleBTNContainer'}>

<button
 disabled = {index === 0}
 onClick = {() => setIndex((prevIndex) => prevIndex - 1)}
 className = {'previousBTN'}>previous</button>
 <button
   disabled = {index === stepBlock - 1}
    onClick = {() => setIndex((prevIndex) => prevIndex + 1)}
     className = {'nextBTN'}>next</button>
</div>
</div>

Я не использовал response-dnd, но когда я создал динамическое перетаскивание, я определил наборы данных для элементов, которые идентифицируются слушателями onmouseup или ontouchend. Динамические элементы React обычно создаются из массивов (точно так же, как вы это делаете в своем коде), и до тех пор, пока вы знаете, какую запись, где вы хотите вставить в новый массив, и сохранить точный ключ данного элемента. Вы можете эффективно повторно визуализировать только затронутые компоненты и сохранить их состояния (при условии, что вы правильно это используете). У меня есть примеры, но они нуждаются в некоторой настройке.

zergski 10.04.2021 01:53

Я вижу, да, любые примеры будут оценены. В основном я пытаюсь понять, как разбить этот внутренний массив на отдельные массивы на основе родительского массива. потому что он не будет работать, если он содержится в родительском массиве.

Robert 10.04.2021 03:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
9
0

Другие вопросы по теме