@dotnetlooper

Как изменять позицию элемента в списке?

Нужно изменить порядок записей с помощью перетаскивания. Для этого использовал react-dnd. Все отлично, но проблема в том, что эти изменения происходят на клиентской части. А мне нужно изменять позиции и на сервере. Куда мне и как передавать позиции? К примеру, у кажой записи есть аттрибут => position.

Логика компонента:
function Note({ id, index, date, title, description, thumbnail, moveNote }) {
    const ref = useRef(null);
    const [{ handlerId }, drop] = useDrop({
        accept: 'note',
        collect(monitor) {
            return { 
                handlerId: monitor.getHandlerId()
            }
        },
        hover(item, monitor) {
            if (!ref.current) {
                return;
            }
            const dragIndex = item.index;
            const hoverIndex = index;
            if (dragIndex === hoverIndex) {
                return;
            }
            const hoverBoundingRect = ref.current?.getBoundingClientRect();
            const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;
            const clientOffset = monitor.getClientOffset();
            const hoverClientY = clientOffset.y - hoverBoundingRect.top;

            if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) {
                return;
            }

            if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) {
                return;
            }
            moveNote(dragIndex, hoverIndex);
            item.index = hoverIndex;
        },
    });
    const [{ isDragging }, drag] = useDrag({
        type: 'note',
        item: () => {
            return { id, index };
        },
        collect: monitor => ({
            isDragging: monitor.isDragging(),
        }),
    });

    const opacity = isDragging ? 0 : 1;
    drag(drop(ref));
....


Логика страницы, где находятся перечень списков:
function NotePage() {   
    const moveNote = useCallback((dragIndex, hoverIndex) => {
        const dragNote = notes[dragIndex];
        setNotes(update(notes, {
            $splice: [
                [dragIndex, 1],
                [hoverIndex, 0, dragNote],
            ],
        }));
    }, [notes]);


Где мне нужно делать изменения(put) в самом компоненте или на странице где их перечень? И как передать эту позицию элемента?
  • Вопрос задан
  • 210 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
28 нояб. 2024, в 21:25
5000 руб./за проект
28 нояб. 2024, в 18:46
3000 руб./за проект
28 нояб. 2024, в 17:46
10000 руб./за проект