Подтвердить что ты не робот

React - get React компонент из дочернего элемента DOM?

Я хотел бы узнать, какой компонент React связан с определенным элементом DOM.

Например, скажем, у меня есть div, и я обрабатываю все свое приложение с помощью React. Div должен быть предоставлен компонентом React, но какой?

Я знаю, что React поставляет метод getDOMNode", чтобы получить DOM node, связанный с компонентом React, но я хотел бы сделать напротив.

Возможно ли это?

4b9b3361

Ответ 1

Нет.

Центральное понятие в Реаге состоит в том, что на самом деле у вас нет элемента управления в DOM. Вместо этого ваш контроль - это функция factory. Что в DOM является текущим визуализацией элемента управления.

Если вам это действительно нужно, вы можете сохранить объект как глобальную переменную, ключи которой представляют собой строковые представления имен функций factory и значениями которых являются функции factory, а затем на вашем рендерируемом div, сохранить атрибут, содержащий имя функции factory.

Но, скорее всего, это вопрос проблемы XY (нужно X, видя путь с Y, а затем спрашивая, как сделать Y.) Вероятно, если вы объясните свою цель там лучший способ, который лучше подходит для React top- вниз концептуальная модель.

Вообще говоря, просить получить доступ к элементу управления от его рендеринга - это попросить получить доступ к SVG из его кэшированного рендеринга PNG. Это возможно, но обычно это красный флаг, что что-то еще концептуально неправильно.

Ответ 2

Вот что я использую, с React 15.3.0:

window.FindReact = function(dom) {
    for (var key in dom) {
        if (key.startsWith("__reactInternalInstance$")) {
            var compInternals = dom[key]._currentElement;
            var compWrapper = compInternals._owner;
            var comp = compWrapper._instance;
            return comp;
        }
    }
    return null;
};

И затем использовать его:

var someElement = document.getElementById("someElement");
FindReact(someElement).setState({test1: test2});

Ответ 3

Если ваш situtation требует получить элемент реакции из DOM node, вот подход, "Общайтесь через событие и перезвоните"

Вы должны запустить настраиваемое событие на элементе DOM и иметь прослушиватель событий для этого настраиваемого события в компоненте React. Это будет отображать элемент DOM для реагирования на компонент.