Estoy rastreando cuando componentDidUpdate y render se disparan con declaraciones de registro.

Las declaraciones de registro en componentDidUpdate no se activan después del render . He usado puntos de interrupción para confirmar que este no es un problema de tiempo.

Estoy usando «render props» para envolver el componente en cuestión. Mi código (despojado) está debajo. Esta es la salida del registro. A veces, hago que RENDER se RENDER , pero de manera inconsistente y nunca es lo último, siempre aparece un RENDER en mis registros, nunca UPDATE .

Según tengo entendido, componentDidUpdate debería activarse incluso si la actualización no modifica el DOM (aunque los renders aquí actualizan el DOM). He intentado React@16.11.x React@16.12.x con resultados idénticos.

ingrese la descripción de la imagen aquí

 class MyWrapper extends React.PureComponent { render() { const { buttonDefinitions } = this.props; return ( {amp}lt;InfoProvider render={infoProps ={amp}gt; { return ( {amp}lt;MyMenu {...{ buttonDefinitions, infoProps }} /{amp}gt; ); }} /{amp}gt; ); } } 
 class MyMenu extends React.Component { componentDidUpdate() { log.warn('UPDATE'); } render() { log.warn('RENDER'); const { buttonDefinitions } = this.props; return ( {amp}lt;MenuWrapper{amp}gt; {buttonDefinitions.map(buttonDef ={amp}gt; ( {amp}lt;MyButton {...buttonDef} /{amp}gt; ))} {amp}lt;/MenuWrapper{amp}gt; ); } } 

Según los documentos de reacción , si está utilizando accesorios de renderizado con el componente React pure, la comparación de accesorios poco profundos siempre devolverá falso para los nuevos accesorios. En este caso, para cada render generará un nuevo valor para el accesorio de render. A medida que se crean nuevos accesorios y no se actualizan los anteriores, no se llamará a componentDidUpdate.