Учитывая ссылку на дочерний элемент (определенный из библиотеки, которую я не могу переопределить), есть ли уже встроенный хук, чтобы подключиться к дочернему компоненту 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);
}
}





Я не думаю, что это можно (правильно) сделать. Если я правильно понимаю, componentDidUpdate в родительском элементе не вызывается, потому что родитель фактически не обновляется при изменении дочернего элемента. Следует вызывать только дочерний компонент и его дочерние методы componentDidUpdate.
Можно придумать какое-нибудь странное решение (например, исправление обезьяны componentDidUpdate через этот ref, обработку в родительском и затем вызов дочернего обработчика), но это звучит ненадежно, и вы нарушите инкапсуляцию компонента и сделаете родительский и дочерний компонент жестко связан. Вы также можете изменить свой вопрос, чтобы лучше объяснить, почему вам нужно это сделать. Мой опыт работы с React показывает, что если вы пытаетесь сделать что-то невозможное, это, вероятно, потому, что вы что-то упускаете.
Поэтому, если эта библиотека не использует какой-либо другой механизм для отправки уведомлений (например, Redux), я думаю, вам не повезло. Я предполагаю, что вы хотите что-то сделать, когда ребенок меняет DOM, верно? Если это так, еще один грязный способ сделать это, предполагая, что родитель упаковывает эти дочерние элементы, — это отслеживать изменения оборачивающего элемента DOM в родительском элементе (используя что-то вроде MutationObserver). Это сделает его очень хакерским и связанным, но, по крайней мере, все эти хаки будут сосредоточены в коде, которым вы владеете и контролируете.
По сути, это библиотека, которая, вероятно, должна иметь несколько обратных вызовов
onUpdatedACertainState, но она не предоставляется, поэтому мне было интересно, могу ли я вместо этого использовать обратный вызов общего состояния.