Na função de renderização do meu componente, tenho:
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>
);
}
tudo fica bem, no entanto, ao clicar no <li>
elemento, recebo o seguinte erro:
Erro não capturado: Violação invariável: os objetos não são válidos como um filho de React (encontrado: objeto com chaves {dispatchConfig, dispatchMarker, nativeEvent, target, currentTarget, tipo, eventPhase, bolhas, cancelável, timeStamp, defaultPrevented, isTrusted, exibição, detalhe, screenX , screenY, clientX, clientY, ctrlKey, shiftKey, altKey, metaKey, getModifierState, botão, botões, relatedTarget, pageX, pageY, isDefaultPrevented, isPropagationStopped, _dispatchListeners, _dispatchIDs}). Se você pretendia render uma coleção de filhos, use uma matriz ou agrupe o objeto usando createFragment (object) nos complementos do React. Verifique o método de renderização de
Welcome
.
Se eu mudar para this.onItemClick.bind(this, item)
a (e) => onItemClick(e, item)
dentro dos tudo funciona função de mapa como esperado.
Se alguém pudesse explicar o que estou fazendo de errado e explicar por que recebo esse erro, seria ótimo
ATUALIZAÇÃO 1: a
função onItemClick é a seguinte e a remoção de this.setState resulta no desaparecimento do erro.
onItemClick(e, item) {
this.setState({
lang: item,
});
}
Mas não consigo remover esta linha, pois preciso atualizar o estado desse componente
fonte
this.onItemClick
é implementado?Respostas:
Eu estava tendo esse erro e, por acaso, incluí um objeto no meu código JSX sem querer, que eu esperava ser um valor de string:
breadcrumbElement
costumava ser uma string, mas devido a um refator havia se tornado um objeto. Infelizmente, a mensagem de erro do React não fez um bom trabalho ao me indicar a linha onde o problema existia. Eu tive que seguir meu rastreamento de pilha até voltar a reconhecer os "adereços" sendo passados para um componente e, em seguida, encontrei o código incorreto.Você precisará fazer referência a uma propriedade do objeto que é um valor de sequência ou converter o Objeto em uma representação de sequência que seja desejável. Uma opção pode ser
JSON.stringify
se você realmente deseja ver o conteúdo do objeto.fonte
Então, eu recebi esse erro ao tentar exibir a
createdAt
propriedade que é um objeto Date. Se você concatenar.toString()
no final dessa maneira, ele fará a conversão e eliminará o erro. Basta postar isso como uma possível resposta, caso mais alguém tenha o mesmo problema:fonte
objects are not valid
violação invariável quando eu adicionasse uma linha. Acontece que eu estava convertendo o objeto Date () em uma string antes de persistir, para que apenas minhas novas linhas tivessem objetos para a data criada. :( Aprenda com o meu exemplo rebelde, pessoas! #Acabei de receber o mesmo erro, mas devido a um erro diferente: usei chaves duplas como:
para inserir o valor de em
count
vez do correto:no qual o compilador provavelmente se transformou
{{count: count}}
, ou seja, tentando inserir um Objeto como um filho do React.fonte
{}
. O par interno é tratado como código ES6. No ES6,{count}
é o mesmo que{count: count}
. Então, quando você digita{{count}}
, é exatamente o mesmo que{ {count: count} }
.this.state = {navMenuItems: {navMenu}};
... o que basicamente transformou meu JSXnavMenu
em um objeto genérico. Alterar parathis.state = {navMenuItems: navMenu};
se livrar do "elenco" não intencionalObject
e corrigir o problema.Só pensei em acrescentar isso porque eu tinha o mesmo problema hoje, acontece que era porque eu estava retornando apenas a função, quando a envolvi em uma
<div>
tag que começou a funcionar, como abaixoO exemplo acima causou o erro. Corrigi o problema alterando a
return()
seção para:...ou simplesmente:
fonte
return gallerySection
se quiser evitar um extradiv
gallerySection
vez de<div>{gallerySection}</div>
me ajudou.O filho da reação (singular) deve ser o tipo de dado primitivo, não o objeto, ou pode ser a tag JSX (que não é o nosso caso) . Use o pacote Proptypes no desenvolvimento para garantir que a validação ocorra.
Apenas uma rápida comparação de snippet de código (JSX) para representá-lo com uma ideia:
Erro: com o objeto sendo passado para o filho
Sem erro: Com a propriedade do objeto ( que deve ser primitiva, ou seja, um valor de sequência ou valor inteiro ) sendo passado para filho.
TLDR; (Na fonte abaixo): verifique se todos os itens que você está processando no JSX são primitivos e não objetos ao usar o React. Esse erro geralmente ocorre porque uma função envolvida no despacho de um evento recebeu um tipo de objeto inesperado (por exemplo, passar um objeto quando você deveria passar uma string) ou parte do JSX em seu componente não faz referência a um primitivo (por exemplo, this.props vs this.props.name).
Fonte - codingbismuth.com
fonte
return <p>{item.whatever}</p>;
O meu tinha a ver com colocar desnecessariamente chaves em volta de uma variável contendo um elemento HTML dentro da instrução de retorno da função render (). Isso fez com que o React o tratasse como um objeto e não como um elemento.
Depois de remover as chaves do elemento, o erro desapareceu e o elemento foi renderizado corretamente.
fonte
A minha tinha a ver com o esquecimento das chaves em volta dos adereços sendo enviados para um componente de apresentação:
Antes:
Depois de
fonte
Eu também estava recebendo o erro "Os objetos não são válidos como um filho de reagir" e, para mim, a causa foi a chamada de uma função assíncrona no meu JSX. Ver abaixo.
O que aprendi é que a renderização assíncrona não é suportada no React. A equipe do React está trabalhando em uma solução, conforme documentado aqui .
fonte
Para quem usa o Firebase com Android, isso só afeta o Android. Minha emulação do iOS ignora isso.
E como postado por Apoorv Bankey acima.
Qualquer coisa acima do Firebase V5.0.3, para Android, atm é um fracasso. Consertar:
Confirmado várias vezes aqui https://github.com/firebase/firebase-js-sdk/issues/871
fonte
Eu também tenho o mesmo problema, mas meu erro é tão estúpido. Eu estava tentando acessar o objeto diretamente.
fonte
Se, por algum motivo, você importou o firebase. Então tente correr
npm i --save [email protected]
. Isso ocorre porque o firebase quebra o react-native, portanto, a execução disso o corrigirá.fonte
No meu caso, esqueci de retornar um elemento html da função render e estava retornando um objeto. O que fiz foi envolver apenas os itens com um elemento html - uma div simples, como abaixo
fonte
Eu tive o mesmo problema porque não coloquei o
props
aparelho nos cílios.Portanto, se seu código for semelhante ao código acima, você receberá esse erro. Para resolver isso, basta colocar chaves em volta do
props
.fonte
Eu recebi o mesmo erro, mudei isso
export default withAlert(Alerts)
para isso
export default withAlert()(Alerts)
.Nas versões mais antigas, o código anterior estava ok, mas nas versões posteriores ele gera um erro. Portanto, use o código posterior para evitar o erro.
fonte
No meu caso, o erro estava acontecendo porque retornei a matriz de elementos entre chaves em vez de apenas retornar a própria matriz.
Código com erro
Código correto
fonte
Você estava apenas usando as chaves do objeto, em vez de todo o objeto!
Mais detalhes podem ser encontrados aqui: https://github.com/gildata/RAIO/issues/48
fonte
Eu tenho o mesmo problema, no meu caso, atualizo o estado redux e os novos parâmetros de dados não correspondiam aos parâmetros antigos. Por isso, quando quero acessar alguns parâmetros através deste Erro,
Talvez essa experiência ajude alguém
fonte
Se você estiver usando o Firebase e vendo esse erro, vale a pena verificar se está importando corretamente. A partir da versão 5.0.4, você precisa importá-lo desta forma:
Sim eu conheço. Também perdi 45 minutos nisso.
fonte
Normalmente, isso aparece porque você não destrói corretamente. Veja este código, por exemplo:
Estamos declarando isso com o
= text =>
param. Mas, realmente, o React espera que este seja umprops
objeto abrangente .Então, deveríamos realmente fazer algo parecido com isto:
Percebe a diferença? O
props
parâmetro aqui pode ser chamado de qualquer coisa (props
é apenas a convenção que corresponde à nomenclatura), React está apenas esperando um objeto com chaves e vals.Com a destruição de objetos, você pode fazer e verá frequentemente algo como isto:
... o que funciona.
As chances são de que qualquer um que tropeçar nisso acidentalmente tenha declarado parametricamente os suportes de seus componentes sem se desestruturar.
fonte
Acabei de me submeter a uma versão realmente boba desse erro, que também posso compartilhar aqui para a posteridade.
Eu tinha algum JSX assim:
Eu precisava comentar isso para depurar alguma coisa. Eu usei o atalho de teclado no meu IDE, o que resultou nisso:
O que é, obviamente, inválido - objetos não são válidos como filhos reagentes!
fonte
Eu gostaria de adicionar outra solução a esta lista.
Especificações:
Eu encontrei o mesmo erro:
Este foi o meu código:
Solução:
O problema estava ocorrendo porque a carga útil estava enviando o item como um objeto. Quando removi a variável de carga útil e coloquei o valor userInput no despacho, tudo começou a funcionar como esperado.
fonte
Se você estiver usando o Firebase, algum dos arquivos do seu projeto. Em seguida, basta colocar a declaração de base de dados de importação no final !!
Eu sei que isso parece loucura, mas tente !!
fonte
Meu problema foi simples quando enfrentei o seguinte erro:
foi só que eu estava passando um objeto com as chaves especificadas no erro enquanto tentava renderizar o objeto diretamente em um componente usando {object} esperando que fosse uma string
durante a renderização em um componente React, usei algo como abaixo
mas deveria ter sido
fonte
Se estiver usando componentes sem estado, siga este tipo de formato:
Isso pareceu funcionar para mim
fonte
Algo assim aconteceu comigo ...
Eu escrevi:
Colocá-lo dentro de uma div corrigiu:
fonte
O que significa que passar algo é um valor-chave. Então, você precisa modificar seu manipulador:
de paraVocê perdeu o aparelho (
{}
).fonte
No meu caso, adicionei uma assíncrona ao meu componente de função filho e encontrei esse erro. Não use assíncrono com componente filho.
fonte
No caso de usar o Firebase, se não funcionar colocando no final das
import
instruções, você pode tentar colocar isso dentro de um dos métodos do ciclo de vida, ou seja, você pode colocá-lo dentrocomponentWillMount()
.fonte
Invariant Violation: Objects are not valid as a React child
aconteceu comigo ao usar um componente que precisava derenderItem
adereços, como:e meu erro foi fazer o meu
renderItem
métodoasync
.fonte
Meu erro foi devido a escrevê-lo desta maneira:
ao invés de:
Isso significava que eu estava tentando renderizar um objeto em vez do valor dentro dele.
editar: isto é para reagir não nativo.
fonte