React-dnd: Kesalahan Tidak Tertangkap: Pelanggaran Invarian: Diharapkan menemukan target yang valid.

Dibuat pada 17 Jul 2015  ·  20Komentar  ·  Sumber: react-dnd/react-dnd

Saya telah menerapkan daftar yang dapat diurutkan dan daftar lain untuk menyeret item dari daftar yang dapat diurutkan itu. Aplikasi berfungsi seperti yang diharapkan. Tetapi ketika saya mencoba untuk memindahkan item yang awalnya ada dalam daftar yang dapat diurutkan itu, saya mendapatkan kesalahan berikut:

Uncaught Error: Invariant Violation: Expected to find a valid target
.n @ app.js:50803
t.canDropOnTarget @ app.js:50804
(anonymous function) @ app.js:50804
t.handleTopDragEnter @ app.js:50804

Saya tidak tahu harus mulai dari mana, karena kodenya bekerja dengan andal dan saya hanya memiliki versi yang diperkecil dist/ReactDnD.min.js .

Ada petunjuk? Apa yang bisa menjadi tipikal untuk menyebabkan kesalahan ini?

Komentar yang paling membantu

Untuk berjaga-jaga jika seseorang tersandung pada kesalahan dan masalah ini, saya memiliki masalah serupa ketika membuat daftar yang dapat diurutkan dan setiap item memiliki kunci yang terdiri dari rangkaian id dan indeksnya pada daftar.
Perbaikan hanya dilakukan dengan menyetel kunci yang tepat (yaitu, konsisten) untuk elemen yang diseret.

Semua 20 komentar

Bisakah Anda membagikan kode Anda?

Ya, tolong letakkan kode runnable di suatu tempat.
Ini juga akan membantu banyak dari Anda dapat menggunakan versi di NPM sehingga akan lebih mudah untuk men-debug masalah.

Saya menemukan kesalahan saat menyiapkan contoh untuk kalian. Objek yang saya kembalikan di beginDrag tidak berisi id. Mungkin React memiliki masalah dengan itu, yang mungkin menyebabkan kesalahan itu di React-Dnd.

Menarik, terima kasih! Kami tidak benar-benar memaksakan batasan apa pun pada apa yang dikembalikan beginDrag() selama itu adalah objek biasa jadi saya ingin tahu apa aliran kesalahannya.

Maaf telah menambahkan ke utas lama, tetapi karena ini adalah satu-satunya referensi untuk kesalahan ini di seluruh internet, saya pikir seseorang mungkin menemukan yang berikut ini berguna di masa mendatang.

Saya memiliki kesalahan yang sama, tetapi masalahnya adalah saya memiliki komponen (mirip dengan Kartu dalam contoh) yang didekorasi dengan _both_ pembungkus seret dan lepas.

Ketika simulateBeginDrag dimulai, itu mengirim _drop target_ (bukan sumber seret) ke validator, yang gagal dengan benar. Solusinya adalah masuk ke kedalaman satu level ( dengan getDecoratedComponentInstance() ) saat mendapatkan id handler.

@yannisbarlas penemuan hebat. Saya mengalami masalah yang sama persis. Mungkin ada yang menyebutkan ini di dokumen pengujian ?

@yannisbarlas Terima kasih banyak atas penemuannya! Sangat membantu saya banyak frustrasi :)

Untuk berjaga-jaga jika seseorang tersandung pada kesalahan dan masalah ini, saya memiliki masalah serupa ketika membuat daftar yang dapat diurutkan dan setiap item memiliki kunci yang terdiri dari rangkaian id dan indeksnya pada daftar.
Perbaikan hanya dilakukan dengan menyetel kunci yang tepat (yaitu, konsisten) untuk elemen yang diseret.

@yannisbarlas Apakah Anda memiliki contoh kode dari solusi Anda?

Maaf atas keterlambatan tanggapan @damiangreen , email pemberitahuan terbang melewati saya.

Kode tidak digunakan lagi (sudah lama), tetapi Anda dapat memeriksanya di sini .

Jika seseorang masih menjalankan masalah ini, harap perhatikan bahwa elemen daftar yang Anda petakan harus memiliki prop kunci tetap . Dalam kasus saya, saya mengirim tindakan Redux untuk mengubah item dalam daftar, dan kemudian memberikan kunci ke elemen yang dipetakan seperti ini:

blocks.map((block, idx) => {
  <React.Fragment key={`${block.name}_${idx}`}>
    ...
  <React.Fragment />
})

yang tampaknya memicu kesalahan, karena idx berubah saat itu juga.

terima kasih @chulanovskyi
bagi saya itu tampak seperti ini:
JSX arr.map((item, idx) => ( <Item item={item} // key={`${idx}_${item.id}`} // this was busted because idx key={item.key} // when adding this to the array elsewhere i use a count for uniqueness index={idx} > </Item> ))

Bagi saya kesalahan ini disebabkan oleh area drop yang dibuat secara dinamis - ketika item terakhir dipindahkan dari area drop Bereaksi dirender ulang tanpa area itu dan ini tampaknya menyebabkan pengecualian. Mungkin itu kondisi balapan di mana area dihilangkan sebelum memindahkan item meskipun grupnya berasal dari item yang sama berubah hmm

Bagi saya kesalahan ini disebabkan oleh area drop yang dibuat secara dinamis - ketika item terakhir dipindahkan dari area drop Bereaksi dirender ulang tanpa area itu dan ini tampaknya menyebabkan pengecualian. Mungkin itu kondisi balapan di mana area dihilangkan sebelum memindahkan item meskipun grupnya berasal dari item yang sama berubah hmm

Hai @DominicTobias
Saya juga telah membuat area drop secara dinamis.
Bagaimana Anda memperbaikinya?

@raymond-ong

Saya juga telah membuat area drop secara dinamis.
Bagaimana Anda memperbaikinya?

Dengan kata lain masalahnya bisa jadi Anda telah membuat komponen induk (tingkat atas) lagi.
Dalam hal ini react-dnd lost id (id batinnya) yang berfungsi dan menghasilkan kesalahan.

Dalam kasus saya, saya telah memperbarui parameter id dari entitas induk saat memperbarui status di peredam (memindahkan kolom di dalam baris, dan memperbarui id baris ketika kolom mengubah tempatnya). Setelah menghapus updating id functionality semuanya mulai bekerja dengan benar.

Saya juga memiliki masalah ini. Dalam kasus saya itu hanya terjadi ketika target drop mengembalikan false di canDrop. Adakah yang bisa memposting solusi Anda untuk masalah ini? Seseorang menyebutkan bahwa ini terkait dengan ID yang hilang, tetapi saya tidak yakin di mana harus meletakkan id?

Saya menghadapi masalah yang sama, saya berhasil mengubah contoh dari dokumen, Anda dapat melihatnya di sini dengan menyeret/menjatuhkan elemen pertama: https://codesandbox.io/s/broken-feather-qf0f2? /src/Container.jsx

Saya juga membuat masalah dengan semua detailnya (mungkin saya seharusnya memposting di sini?) #2693

Saya memiliki masalah yang sama, dan saya memperbaikinya seperti ini:

kode saya terlihat seperti

const ParentOfCards = () => {    

     const [ cards, setCards ] = useState([ ... ])

    const CardComponent = ({ card, index }) => {
       return (/**/)
    }
    return (
        <div>
            { cards.map( CardComponent ) }
        </div>
    )

}

ternyata Anda tidak dapat memasukkan CardComponent dalam ParentOfCards ( saya pikir itu ada hubungannya dengan re-renders ), jadi saya menyelesaikannya dengan memisahkan CardComponent dari ParentOfCards lingkup

const ParentOfCards = () => {    

     const [ cards, setCards ] = useState([ ... ])


    return (
        <div>
            { cards.map( CardComponent ) }
        </div>
    )

}

const CardComponent = ({ card, index }) => {
       return (/**/)
}

Dan sekarang ( setelah dua hari debugging :c ) berhasil! 😁

@marcelomrtnz Terima kasih banyak
Anda menghemat banyak waktu saya untuk masalah ini di ponsel

Saya menghadapi masalah yang sama saat menyeret drop di ponsel dengan react dnd lib tetapi setelah menghapus div kolom baris dari daftar dan hanya menyimpan daftar kartu, itu berfungsi untuk saya tanpa kesalahan ini. Itu mendapat target yang valid di browser seluler

Saya mendapat ide ini dari posting Anda jadi terima kasih @marcelomrtnz

Saya memiliki masalah yang sama. https://codesandbox.io/s/proud-wind-hklt6?file=/src/CreateForum.jsx
Ini kotak pasir. seret item 1ba ke atas item 1, lalu item 1ba ke bawah lagi.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat