En la función de render de mi componente tengo:
render() {
const items = ['EN', 'IT', 'FR', 'GR', 'RU'].map((item) => {
return (<li onClick={this.onItemClick.bind(this, item)} key={item}>{item}</li>);
});
return (
<div>
...
<ul>
{items}
</ul>
...
</div>
);
}
todo funciona bien, sin embargo, al hacer clic en el <li>
elemento, recibo el siguiente error:
Error no detectado: Infracción invariable: los objetos no son válidos como React child (encontrado: objeto con claves {dispatchConfig, dispatchMarker, nativeEvent, target, currentTarget, type, eventPhase, bubbles, cancelable, timeStamp, defaultPrevented, isTrusted, view, detail, screenX , screenY, clientX, clientY, ctrlKey, shiftKey, altKey, metaKey, getModifierState, button, buttons, relatedTarget, pageX, pageY, isDefaultPrevented, isPropagationStopped, _dispatchListeners, _dispatchIDs}). Si tenía la intención de representar una colección de elementos secundarios, use una matriz en su lugar o ajuste el objeto usando createFragment (objeto) de los complementos React. Verifique el método de renderizado de
Welcome
.
Si cambio a this.onItemClick.bind(this, item)
que (e) => onItemClick(e, item)
dentro de las funciones todo funciona como se esperaba mapa.
Si alguien pudiera explicar lo que estoy haciendo mal y explicar por qué recibo este error, sería genial
ACTUALIZACIÓN 1: la
función onItemClick es la siguiente y al eliminar this.setState se produce la desaparición del error.
onItemClick(e, item) {
this.setState({
lang: item,
});
}
Pero no puedo eliminar esta línea ya que necesito actualizar el estado de este componente
fuente
this.onItemClick
se implementa?Respuestas:
Estaba teniendo este error y resultó que estaba incluyendo involuntariamente un objeto en mi código JSX que esperaba que fuera un valor de cadena:
breadcrumbElement
solía ser una cadena pero debido a un refactor se había convertido en un Objeto. Desafortunadamente, el mensaje de error de React no hizo un buen trabajo al señalarme la línea donde existía el problema. Tuve que seguir mi rastro de la pila hasta que reconocí los "accesorios" que se pasaban a un componente y luego encontré el código ofensivo.Deberá hacer referencia a una propiedad del objeto que sea un valor de cadena o convertir el Objeto en una representación de cadena que sea deseable. Una opción podría ser
JSON.stringify
si realmente desea ver el contenido del Objeto.fuente
Entonces recibí este error al intentar mostrar la
createdAt
propiedad que es un objeto Date. Si concatena.toString()
al final de esta manera, hará la conversión y eliminará el error. Simplemente publique esto como una posible respuesta en caso de que alguien más se encuentre con el mismo problema:fuente
objects are not valid
violación invariante cuando agregue una fila. Resulta que estaba convirtiendo el objeto Date () en una cadena antes de persistir, por lo que solo mis nuevas filas tenían objetos para la fecha creada. :( ¡Aprenda de mi ejemplo de personas rebeldes!Acabo de recibir el mismo error pero debido a un error diferente: utilicé llaves dobles como:
para insertar el valor de en
count
lugar del correcto:en el que presumiblemente se convirtió el compilador
{{count: count}}
, es decir, tratando de insertar un objeto como un hijo Reactfuente
{}
. El par interno se trata como código ES6. En ES6,{count}
es lo mismo que{count: count}
. Entonces, cuando escribe{{count}}
, eso es exactamente lo mismo que{ {count: count} }
.this.state = {navMenuItems: {navMenu}};
... que básicamente convirtió mi JSXnavMenu
en un objeto genérico. Cambiando parathis.state = {navMenuItems: navMenu};
deshacerse del 'elenco' involuntarioObject
y solucionado el problema.Solo pensé que agregaría a esto ya que tenía el mismo problema hoy, resulta que fue porque estaba devolviendo solo la función, cuando lo envolví en una
<div>
etiqueta comenzó a funcionar, como se muestra a continuaciónLo anterior causó el error. Solucioné el problema cambiando la
return()
sección a:...o simplemente:
fuente
return gallerySection
si desea evitar un extradiv
gallerySection
lugar de<div>{gallerySection}</div>
ayudarme.React child (singular) debe ser un tipo de datos primitivos , no un objeto o podría ser una etiqueta JSX (que no es nuestro caso) . Utilice el paquete Proptypes en desarrollo para asegurarse de que se realice la validación.
Solo una comparación rápida de fragmentos de código (JSX) para representarlo con una idea:
Error: con el objeto que se pasa al niño
Sin error: con la propiedad del objeto ( que debe ser primitiva, es decir, un valor de cadena o valor entero ) que se pasa al hijo.
TLDR; (De la fuente a continuación): asegúrese de que todos los elementos que está renderizando en JSX son primitivos y no objetos al usar React. Este error generalmente ocurre porque a una función involucrada en el envío de un evento se le ha dado un tipo de objeto inesperado (es decir, pasar un objeto cuando debería pasar una cadena) o parte de JSX en su componente no hace referencia a una primitiva (es decir, this.props vs this.props.name).
Fuente - codingbismuth.com
fuente
return <p>{item.whatever}</p>;
El mío tenía que ver con poner innecesariamente llaves alrededor de una variable que contenía un elemento HTML dentro de la declaración de retorno de la función render (). Esto hizo que React lo tratara como un objeto en lugar de un elemento.
Una vez que quité las llaves del elemento, el error desapareció y el elemento se procesó correctamente.
fuente
El mío tuvo que ver con olvidar las llaves entre los accesorios que se envían a un componente de presentación:
Antes de:
Después
fuente
Yo también recibí este error "Los objetos no son válidos como React child" y para mí la causa se debió a llamar a una función asincrónica en mi JSX. Vea abajo.
Lo que aprendí es que la representación asincrónica no es compatible con React. El equipo de React está trabajando en una solución como se documenta aquí .
fuente
Para cualquiera que use Firebase con Android, esto solo rompe Android. Mi emulación de iOS lo ignora.
Y según lo publicado por Apoorv Bankey arriba.
Cualquier cosa por encima de Firebase V5.0.3, para Android, atm es un fracaso. Reparar:
Confirmado numerosas veces aquí https://github.com/firebase/firebase-js-sdk/issues/871
fuente
También tengo el mismo problema pero mi error es tan estúpido. Estaba tratando de acceder al objeto directamente.
fuente
Si por alguna razón importó firebase. Entonces intenta correr
npm i --save [email protected]
. Esto se debe a que Firebase rompe react-native, por lo que ejecutar esto lo solucionará.fuente
En mi caso, se me olvidó devolver un elemento html de la función render y estaba devolviendo un objeto. Lo que hice fue envolver los {items} con un elemento html, un div simple como el siguiente
fuente
Tuve el mismo problema porque no puse las
props
llaves.Entonces, si su código es similar al anterior, obtendrá este error. Para resolver esto, simplemente coloque llaves alrededor del
props
.fuente
Recibí el mismo error, cambié esto
export default withAlert(Alerts)
a esto
export default withAlert()(Alerts)
.En versiones anteriores, el código anterior estaba bien, pero en versiones posteriores arroja un error. Entonces use el código posterior para evitar el error.
fuente
En mi caso, el error estaba ocurriendo porque devolví la matriz de elementos entre llaves lugar de simplemente devolver la matriz en sí.
Código con error
Código correcto
fuente
¡Solo estabas usando las teclas de objeto, en lugar de todo el objeto!
Puede encontrar más detalles aquí: https://github.com/gildata/RAIO/issues/48
fuente
Tengo el mismo problema, en mi caso, actualizo el estado redux , y los nuevos parámetros de datos no coincidían con los parámetros antiguos, así que cuando quiero acceder a algunos parámetros a través de este Error,
Quizás esta experiencia ayude a alguien
fuente
Si está utilizando Firebase y ve este error, vale la pena verificar si lo está importando correctamente. A partir de la versión 5.0.4, debe importarlo así:
Sí, lo sé. También perdí 45 minutos en esto.
fuente
Por lo general, esto aparece porque no se desestructura correctamente. Tome este código por ejemplo:
Lo estamos declarando con el
= text =>
param. Pero en realidad, React espera que este sea unprops
objeto que lo abarque todo .Entonces realmente deberíamos estar haciendo algo como esto:
¿Nota la diferencia? El
props
parámetro aquí podría llamarse cualquier cosa (props
es solo la convención que coincide con la nomenclatura), React solo espera un objeto con claves y valles.Con la desestructuración de objetos puede hacer, y verá con frecuencia, algo como esto:
... que funciona.
Lo más probable es que cualquiera que se tope con esto simplemente haya declarado accidentalmente los accesorios de sus componentes param sin desestructuración.
fuente
Acabo de pasar por una versión realmente tonta de este error, que también podría compartir aquí para la posteridad.
Tuve algunos JSX como este:
Necesitaba comentar esto para depurar algo. Usé el atajo de teclado en mi IDE, lo que resultó en esto:
Lo cual, por supuesto, no es válido: ¡los objetos no son válidos como hijos secundarios!
fuente
Me gustaría agregar otra solución a esta lista.
Especificaciones:
Encontré el mismo error:
Este fue mi código:
Solución:
El problema estaba ocurriendo porque la carga útil estaba enviando el artículo como un objeto. Cuando eliminé la variable de carga útil y puse el valor de entrada de usuario en el despacho, todo comenzó a funcionar como se esperaba.
fuente
En caso de que esté usando Firebase cualquiera de los archivos dentro de su proyecto. ¡Entonces solo coloca esa declaración de importación de Firebase al final!
Sé que esto suena loco pero ¡pruébalo!
fuente
Mi problema fue simple cuando me enfrenté al siguiente error:
era solo que estaba pasando un objeto con las claves especificadas en el error mientras intentaba representar el objeto directamente en un componente usando {object} esperando que fuera una cadena
mientras renderizaba en un componente React, usé algo como a continuación
pero debería haber sido
fuente
Si usa componentes sin estado, siga este tipo de formato:
Esto pareció funcionar para mí.
fuente
Algo como esto me acaba de pasar ...
Escribí:
Colocándolo dentro de un div lo arregló:
fuente
Lo que significa que pasar algo es un valor clave. Por lo tanto, debe modificar su controlador:
de aTe perdiste las llaves (
{}
).fuente
En mi caso, agregué un asíncrono a mi componente de función hijo y encontré este error. No use asíncrono con el componente hijo.
fuente
En el caso de usar Firebase, si no funciona colocando al final de las
import
declaraciones, puede intentar poner eso dentro de uno de los métodos del ciclo de vida, es decir, puede ponerlo dentrocomponentWillMount()
.fuente
Invariant Violation: Objects are not valid as a React child
me pasó cuando usé un componente que necesitabarenderItem
accesorios, como:y mi error fue hacer mi
renderItem
métodoasync
.fuente
Mi error fue por escribirlo de esta manera:
en vez de:
Significaba que estaba tratando de representar el objeto en lugar del valor dentro de él.
editar: esto es para reaccionar no nativo.
fuente