cari

Rumah  >  Soal Jawab  >  teks badan

Vue.js masih mengemas kini prop walaupun i ialah pembolehubah kaedah

Saya mempunyai kaedah berikut untuk membandingkan dua tatasusunan, satu daripada prop dan satu lagi daripada komponen saya. Saya memasukkan setiap elemen yang wujud dalam tatasusunan props tetapi tidak dalam tatasusunan komponen saya ke dalam tatasusunan ketiga dan menambah harta yang dipanggil "musnahkan: benar" supaya saya boleh menghantarnya ke bahagian belakang Padam daripada pangkalan data.

Walau bagaimanapun, atas sebab tertentu prop saya dikemas kini dan bukannya pembolehubah yang saya gunakan dalam kaedah. Saya tidak pasti mengapa ini berlaku kerana saya tidak merujuk prop secara langsung, tetapi saya menyalin kandungannya ke dalam pembolehubah dalam kaedah.

updateArray(){
        let updatedArray = []
        let oldArray = [...this.props.array]
        oldArray.forEach(element => {
          if(this.componentArray.indexOf(element) > -1){
            updatedArray.push(element)
          }else{
            let newElement = element
            newElement.destroy = true
            updatedArray.push(newElement)
          }
        })
       return updatedArray 
},

Mengapa ini berlaku? Elemen lain dalam komponen saya berfungsi dengan baik, hanya yang ini mempunyai masalah.

P粉432930081P粉432930081446 hari yang lalu693

membalas semua(1)saya akan balas

  • P粉465675962

    P粉4656759622023-09-16 11:40:37

    Ya, anda sedang menyalin this.props.array elemen tatasusunan ke dalam tatasusunan setempat kaedah baharu, tetapi memandangkan elemen tatasusunan adalah objek, kedua-dua tatasusunan akhirnya mengandungi objek yang sama (rujukan kepada objek )

    Anda boleh mencipta let newElement = { ...element }salinan cetek elemen asal menggunakan operator hamparan - ini akan mencipta objek baharu sepenuhnya, menyalin semua sifat objek asal. Tetapi sedar bahawa jika mana-mana sifat objek asal mengandungi tatasusunan/objek, anda akan menghadapi masalah yang sama...hanya lebih mendalam sedikit

    balas
    0
  • Batalbalas