Por qué uso React 18 y createRoot en mis controles PCF
Artículo de conocimiento · 28 jul 2026
- Origen
- GitHub · README
- Estado
- Publicado
Contenido
El patrón heredado ReactDOM.render() reconstruye todo el árbol en cada updateView() y rompe los componentes de Fluent UI que usan posicionamiento.
El problema
Muchos ejemplos de PCF llaman a ReactDOM.render() dentro de updateView(). Con React 16 y ese patrón, todo el árbol se destruye y se vuelve a crear cada vez que el formulario notifica un cambio.
Con componentes sencillos no se nota, pero los de Fluent UI que dependen de @fluentui/react-positioning (como Combobox o Dialog) pueden fallar de forma reproducible: el desplegable pierde su ancla a mitad de una interacción.
La solución
- Crear la raíz una sola vez en
init()concreateRoot. - En
updateView(), limitarse a llamar aroot.render(...)con las nuevas props: React reconcilia en lugar de reconstruir. - Desmontar en
destroy()conroot.unmount().
init(context, notify, state, container) {
this.root = createRoot(container);
}
updateView(context) {
this.root.render(<CountryPicker {...props} />);
}
destroy() {
this.root.unmount();
}
Es un cambio pequeño que elimina una familia entera de errores difíciles de diagnosticar.
General
- Publicado
- 28 jul 2026
- Origen
- GitHub · README
- Palabras clave
- PCFReactFluent UITypeScript
- Proyecto relacionado
- Country Lookup