Реагировать на проблему распространения события перетаскивания

У меня есть простая настройка Drag & Drop. Что особенного, так это то, что внутри дропзоны могут быть дропзоны. Моя проблема в том, что всякий раз, когда я добавляю что-то в свой дочерний компонент, родительское событие также запускается но только при определенных обстоятельствах.

Например (это работает, без распространения событий):

export default class Folder extends Component {
    constructor(props) {
        super(props);
        this.state = {
            dragActive: false
        };
    }

    onDragOver = (e) => {
        e.preventDefault();
        this.setState({ dragActive: true });
    }

    onDragLeave = () => {
        this.setState({ dragActive: false });
    }

    onDrop = (e) => {
        e.stopPropagation();
        alert("test");
    }

    render() {
        return (
            <div className = "col-6 col-sm-4 col-md-3 col-lg-2 col-xl-8ths" onDragOver = {this.onDragOver} onDragLeave = {this.onDragLeave} onDrop = {this.onDrop}>

            </div>
        );
    }
}

Важная часть - вот эта строка:

onDrop = {this.onDrop}

Если мое событие перетаскивания находится внутри того же компонента, все работает так, как ожидалось.

Как только я изменю строку на это:

onDrop = {() => this.props.onDropFunction(event, this.props.folder.id)}

Распространение событий перестает работать. Это функция onDrop, которую я вызываю внутри родителя:

onDrop = (e, folderId) => {
    e.stopPropagation();
    e.preventDefault();
    var files = this.fileListToArray(e.dataTransfer.files);
    this.setState({
        dragActive: false,
        uploadFiles: files
    }, () => {
        this.uploadFiles(folderId);
    });
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
1 719
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Нашел ответ в этот SO-пост (просто недостаточно прокрутил вниз).

Таким образом, очевидно, решение состоит в том, чтобы в основном использовать первый подход и заменить часть alert("test") на this.props.onDropFunction(event, this.props.folder.id);.

onDrop = {(event) => this.props.onDropFunction(event, this.props.folder.id)}

пропустите такое событие и попробуйте

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