Dalam fungsi render komponen saya, saya memiliki:
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>
);
}
semuanya membuat baik-baik saja, namun ketika mengklik <li>
elemen saya menerima kesalahan berikut:
Uncaught Error: Pelanggaran Invarian: Objek tidak valid sebagai anak Bereaksi (ditemukan: objek dengan kunci {dispatchConfig, dispatchMarker, nativeEvent, target, currentTarget, jenis, eventPhase, gelembung, dapat dibatalkan, timeStamp, defaultPrevented, isTrusted, view, detail, screenX , screenY, clientX, clientY, ctrlKey, shiftKey, altKey, metaKey, getModifierState, tombol, tombol, terkait Target, pageX, halamanY, isDefaultPrevented, isPropagationStopped, _dispatchListeners, _dispatchIDs}). Jika Anda bermaksud merender koleksi anak-anak, gunakan array atau bungkus objek menggunakan createFragment (objek) dari React add-ons. Periksa metode render dari
Welcome
.
Jika saya beralih ke this.onItemClick.bind(this, item)
ke (e) => onItemClick(e, item)
dalam fungsi peta semuanya berfungsi seperti yang diharapkan.
Jika seseorang dapat menjelaskan apa yang saya lakukan salah dan menjelaskan mengapa saya mendapatkan kesalahan ini, akan sangat bagus
UPDATE 1:
fungsi onItemClick adalah sebagai berikut dan menghapus this.setState mengakibatkan kesalahan menghilang.
onItemClick(e, item) {
this.setState({
lang: item,
});
}
Tetapi saya tidak dapat menghapus baris ini karena saya perlu memperbarui status komponen ini
sumber
this.onItemClick
implementasinya?Jawaban:
Saya mengalami kesalahan ini dan ternyata saya tidak sengaja memasukkan Obyek dalam kode JSX yang saya harapkan menjadi nilai string:
breadcrumbElement
Dulu string tetapi karena refactor telah menjadi Obyek. Sayangnya, pesan kesalahan React tidak melakukan pekerjaan yang baik dalam mengarahkan saya ke garis di mana masalah itu ada. Saya harus mengikuti jejak stack saya kembali ke atas sampai saya mengenali "alat peraga" yang dilewatkan ke dalam komponen dan kemudian saya menemukan kode yang menyinggung.Anda harus mereferensikan properti objek yang merupakan nilai string atau mengonversi Obyek ke representasi string yang diinginkan. Salah satu opsi mungkin
JSON.stringify
jika Anda benar-benar ingin melihat konten Obyek.sumber
Jadi saya mendapatkan kesalahan ini ketika mencoba menampilkan
createdAt
properti yang merupakan objek Date. Jika Anda.toString()
menyambung di akhir seperti ini, itu akan melakukan konversi dan menghilangkan kesalahan. Hanya memposting ini sebagai jawaban yang mungkin jika ada orang lain yang mengalami masalah yang sama:sumber
objects are not valid
pelanggaran invarian ketika saya menambahkan baris. Ternyata saya mengonversi objek Date () ke string sebelum bertahan sehingga hanya baris baru saya yang memiliki objek untuk tanggal yang dibuat. :( Belajar dari orang-orang teladan saya yang bandel!Saya baru saja mendapatkan kesalahan yang sama tetapi karena kesalahan yang berbeda: Saya menggunakan kawat gigi ganda seperti:
untuk memasukkan nilai
count
bukannya yang benar:dimana kompiler mungkin berubah menjadi
{{count: count}}
, yaitu mencoba memasukkan Obyek sebagai anak Bereaksi.sumber
{}
. Pasangan batin diperlakukan sebagai kode ES6. Dalam ES6,{count}
sama dengan{count: count}
. Jadi ketika Anda mengetik{{count}}
, itu persis sama dengan{ {count: count} }
.this.state = {navMenuItems: {navMenu}};
... yang pada dasarnya mengubah JSX sayanavMenu
menjadi objek generik. Mengubah untukthis.state = {navMenuItems: navMenu};
menyingkirkan 'pemeran' yang tidak disengajaObject
dan memperbaiki masalah tersebut.Hanya berpikir saya akan menambah ini karena saya memiliki masalah yang sama hari ini, ternyata itu karena saya hanya mengembalikan fungsinya, ketika saya membungkusnya dengan
<div>
tag, ia mulai bekerja, seperti di bawah iniDi atas menyebabkan kesalahan. Saya memperbaiki masalah dengan mengubah
return()
bagian menjadi:... atau hanya:
sumber
return gallerySection
jika Anda ingin menghindari ekstradiv
gallerySection
bukannya<div>{gallerySection}</div>
membantu saya.Bereaksi anak (tunggal) harus tipe tipe data primitif bukan objek atau bisa juga tag JSX (yang tidak ada dalam kasus kami) . Gunakan paket Proptypes dalam pengembangan untuk memastikan validasi terjadi.
Hanya perbandingan potongan kode singkat (JSX) untuk mewakili Anda dengan ide:
Kesalahan: Dengan objek yang diteruskan ke anak
Tanpa kesalahan: Dengan properti objek ( yang harus primitif, yaitu nilai string atau nilai integer ) diteruskan ke child.
TLDR; (Dari sumber di bawah): Pastikan semua item yang Anda render di BEJ adalah primitif dan bukan objek saat menggunakan Bereaksi. Kesalahan ini biasanya terjadi karena fungsi yang terlibat dalam pengiriman peristiwa telah diberi jenis objek yang tidak terduga (yaitu melewati objek ketika Anda harus melewati sebuah string) atau bagian dari JSX di komponen Anda tidak merujuk ke primitif (mis. This.props vs this.props.name).
Sumber - codingbismuth.com
sumber
return <p>{item.whatever}</p>;
Milik saya harus dilakukan dengan tidak perlu menempatkan kurung kurawal di sekitar variabel yang memegang elemen HTML di dalam pernyataan kembali fungsi render (). Ini membuat React memperlakukannya sebagai objek daripada elemen.
Setelah saya menghapus kurung kurawal dari elemen, kesalahan itu hilang, dan elemen itu diberikan dengan benar.
sumber
Tambang saya lakukan dengan melupakan kawat gigi keriting di sekitar alat peraga yang dikirim ke komponen presentasi:
Sebelum:
Setelah
sumber
Saya juga mendapatkan kesalahan "Objek tidak valid sebagai anak Bereaksi" dan bagi saya penyebabnya adalah karena memanggil fungsi asinkron di JSX saya. Lihat di bawah.
Apa yang saya pelajari adalah bahwa rendering asinkron tidak didukung dalam Bereaksi. Tim Bereaksi sedang mengerjakan solusi seperti yang didokumentasikan di sini .
sumber
Bagi siapa pun yang menggunakan Firebase dengan Android, ini hanya merusak Android. Emulasi iOS saya mengabaikannya.
Dan seperti yang diposting oleh Apoorv Bankey di atas.
Apa pun di atas Firebase V5.0.3, untuk Android, atm adalah sebuah kegagalan. Memperbaiki:
Dikonfirmasi berkali-kali di sini https://github.com/firebase/firebase-js-sdk/issues/871
sumber
Saya juga memiliki masalah yang sama tetapi kesalahan saya sangat bodoh. Saya mencoba mengakses objek secara langsung.
sumber
Jika karena alasan tertentu Anda mengimpor firebase. Lalu cobalah berlari
npm i --save [email protected]
. Ini karena firebase break react-native, jadi menjalankan ini akan memperbaikinya.sumber
Dalam kasus saya, saya lupa mengembalikan elemen html dari fungsi render dan saya mengembalikan sebuah objek. Apa yang saya lakukan adalah saya baru saja membungkus {items} dengan elemen html - div sederhana seperti di bawah ini
sumber
Saya memiliki masalah yang sama karena saya tidak memasukkan
props
kurung kurawal.Jadi jika kode Anda mirip dengan yang di atas maka Anda akan mendapatkan kesalahan ini. Untuk mengatasinya cukup letakkan kurung kurawal di sekitar
props
.sumber
Saya mendapat kesalahan yang sama, saya mengubah ini
export default withAlert(Alerts)
untuk ini
export default withAlert()(Alerts)
.Di versi yang lebih lama, kode yang lama tidak masalah, tetapi di versi yang lebih lama kode itu melempar kesalahan. Jadi gunakan kode yang lebih baru untuk menghindari kesalahan.
sumber
Dalam kasus saya kesalahan terjadi karena saya mengembalikan elemen array di kurung kurawal bukan hanya mengembalikan array itu sendiri.
Kode dengan kesalahan
Kode yang benar
sumber
Anda hanya menggunakan kunci objek, bukan seluruh objek!
Rincian lebih lanjut dapat ditemukan di sini: https://github.com/gildata/RAIO/issues/48
sumber
Saya memiliki masalah yang sama, dalam kasus saya, saya memperbarui redux keadaan , dan parameter data baru tidak cocok dengan parameter lama, Jadi ketika saya ingin mengakses beberapa parameter melalui Kesalahan ini,
Mungkin pengalaman ini membantu seseorang
sumber
Jika Anda menggunakan Firebase dan melihat kesalahan ini, ada baiknya untuk memeriksa apakah Anda mengimpornya dengan benar. Pada versi 5.0.4 Anda harus mengimpornya seperti ini:
Ya saya tahu. Saya kehilangan 45 menit untuk ini juga.
sumber
Biasanya ini muncul karena Anda tidak merusak dengan benar. Ambil kode ini misalnya:
Kami mendeklarasikannya dengan
= text =>
param. Tapi sungguh, React mengharapkan ini menjadiprops
objek yang mencakup semua .Jadi kita harus benar-benar melakukan sesuatu seperti ini:
Perhatikan perbedaannya? The
props
param sini bisa diberi nama apa saja (props
hanya konvensi yang cocok nomenklatur), bereaksi hanya mengharapkan sebuah objek dengan tombol dan vals.Dengan perusakan objek yang dapat Anda lakukan, dan akan sering melihat, sesuatu seperti ini:
... yang berhasil.
Kemungkinannya, siapa pun yang menemukan ini hanya secara tidak sengaja menyatakan alat peraga komponen mereka tanpa merusak.
sumber
Saya hanya menempatkan diri saya melalui versi yang sangat konyol dari kesalahan ini, yang mungkin saya bagikan di sini untuk anak cucu.
Saya punya beberapa BEJ seperti ini:
Saya perlu mengomentari ini untuk men-debug sesuatu. Saya menggunakan pintasan keyboard di IDE saya, yang menghasilkan ini:
Yang, tentu saja, tidak valid - objek tidak valid sebagai reaksi anak-anak!
sumber
Saya ingin menambahkan solusi lain ke daftar ini.
Spesifikasi:
Saya mengalami kesalahan yang sama:
Ini adalah kode saya:
Larutan:
Masalahnya terjadi karena muatan mengirim barang sebagai objek. Ketika saya menghapus variabel payload dan memasukkan nilai userInput ke dalam pengiriman semuanya mulai berfungsi seperti yang diharapkan.
sumber
Jika seandainya Anda menggunakan Firebase salah satu file dalam proyek Anda. Maka cukup tempatkan pernyataan firebase impor itu di akhir !!
Saya tahu ini terdengar gila tetapi cobalah !!
sumber
Masalah saya sederhana ketika saya menghadapi kesalahan berikut:
hanya saja saya melewatkan objek dengan kunci yang ditentukan dalam kesalahan saat mencoba untuk merender objek secara langsung dalam komponen menggunakan {objek} mengharapkannya menjadi string
saat merender pada Komponen Bereaksi, saya menggunakan sesuatu seperti di bawah ini
tapi seharusnya begitu
sumber
Jika menggunakan komponen stateless, ikuti format seperti ini:
Ini sepertinya bekerja untuk saya
sumber
Sesuatu seperti ini baru saja terjadi pada saya ...
Saya menulis:
Menempatkannya di dalam div memperbaikinya:
sumber
Yang berarti Anda melewati sesuatu adalah nilai kunci. Jadi, Anda perlu memodifikasi handler Anda:
dari untukAnda melewatkan kawat gigi (
{}
).sumber
Dalam kasus saya, saya menambahkan async ke komponen fungsi anak saya dan mengalami kesalahan ini. Jangan gunakan async dengan komponen anak.
sumber
Jika menggunakan Firebase, jika itu tidak berhasil dengan meletakkan di akhir
import
pernyataan maka Anda bisa mencoba memasukkannya ke dalam salah satu metode siklus-hidup, yaitu, Anda bisa memasukkannya ke dalamcomponentWillMount()
.sumber
Invariant Violation: Objects are not valid as a React child
terjadi pada saya ketika menggunakan komponen yang membutuhkanrenderItem
alat peraga, seperti:dan kesalahan saya adalah membuat
renderItem
metode sayaasync
.sumber
Kesalahan saya adalah karena menulis seperti ini:
dari pada:
Itu berarti saya mencoba untuk membuat objek, bukan nilai di dalamnya.
sunting: ini untuk bereaksi bukan asli.
sumber