Использование дочернего элемента React componentDidUpdate

Учитывая ссылку на дочерний элемент (определенный из библиотеки, которую я не могу переопределить), есть ли уже встроенный хук, чтобы подключиться к дочернему компоненту componentDidUpdate?

Если бы я мог определить дочерний элемент, это было бы эквивалентно:

Parent extends React.Component {
    constructor() {
        this.child = React.createRef();
    }

    render() {
        return (<Child ref = {this.child});
    }

}

Child extends React.Component {
    componentDidUpdate(prevProps, prevState, snapshot) {
        this.props.onComponentDidUpdate(prevProps, prevState, snapshot);
    }
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
142
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я не думаю, что это можно (правильно) сделать. Если я правильно понимаю, componentDidUpdate в родительском элементе не вызывается, потому что родитель фактически не обновляется при изменении дочернего элемента. Следует вызывать только дочерний компонент и его дочерние методы componentDidUpdate.

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

По сути, это библиотека, которая, вероятно, должна иметь несколько обратных вызовов onUpdatedACertainState, но она не предоставляется, поэтому мне было интересно, могу ли я вместо этого использовать обратный вызов общего состояния.

Nathan 12.05.2019 09:58

Поэтому, если эта библиотека не использует какой-либо другой механизм для отправки уведомлений (например, Redux), я думаю, вам не повезло. Я предполагаю, что вы хотите что-то сделать, когда ребенок меняет DOM, верно? Если это так, еще один грязный способ сделать это, предполагая, что родитель упаковывает эти дочерние элементы, — это отслеживать изменения оборачивающего элемента DOM в родительском элементе (используя что-то вроде MutationObserver). Это сделает его очень хакерским и связанным, но, по крайней мере, все эти хаки будут сосредоточены в коде, которым вы владеете и контролируете.

Allan 12.05.2019 22:29

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