Cada consumidor se vuelve a renderizar cuando el valor del provider cambia por referencia, sin importar qué parte del valor lea, porque el contexto no tiene selectores. Un provider que guarda un objeto grande creado de cero en cada render acabará re-renderizando a todos los consumidores constantemente. Se arregla memoizando el valor, separando estado y dispatch en contextos distintos, o guardando los datos en un store externo al que los consumidores se suscriben con selectores.
Por qué lo preguntan los entrevistadores
Context es la API peor usada de React, así que el entrevistador quiere saber si has sufrido el dolor. Está atento a que menciones que no hay suscripción parcial y a que ofrezcas mitigaciones prácticas en lugar de una prohibición general del contexto. Mencionar useSyncExternalStore o una librería de store pequeña demuestra que sabes en qué punto el contexto deja de ser la herramienta adecuada.
Cómo estructurar tu respuesta
- Enuncia la regla: cualquier cambio de valor re-renderiza a todos los consumidores.
- Explica por qué: no hay selectores y la comparación es por referencia.
- Enumera los arreglos en orden: memoizar, separar y luego pasar a un store.
- Di en qué es genuinamente bueno el contexto, como la configuración estable.
Ejemplo de respuesta
Context es ante todo un mecanismo de inyección de dependencias y, de lejos, un gestor de estado en segundo lugar. El problema de rendimiento es que los consumidores se suscriben al valor entero, así que cuando el valor del provider cambia de identidad, todos los consumidores por debajo renderizan, incluso uno que solo lee un booleano. Lo primero que reviso es si el provider está construyendo un objeto nuevo en línea dentro del JSX, porque eso es una referencia nueva en cada render del padre y echa por tierra todo lo demás. Después separo contextos, porque normalmente los datos cambian a menudo y los setters no cambian nunca, así que poner el dispatch en su propio contexto corta la mayor parte del ruido. Si todavía necesito selectores, dejo de fingir que el contexto es un store y pongo el estado en uno de verdad, y me suscribo con useSyncExternalStore o con una librería para que cada componente elija su porción. Donde el contexto sigue siendo excelente es en cosas estables: el tema, el usuario actual, el idioma, una instancia de cliente. Eso cambia casi nunca, así que el coste del re-render da igual.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Cómo evita useSyncExternalStore el problema de los re-renders?
- ¿Qué ocurre con providers anidados del mismo contexto?
- ¿Usarías contexto para el estado de un formulario? ¿Por qué no?
Más preguntas para Desarrollador React
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas