Rumah hujung hadapan web View.js Cara menyelesaikan ralat '[Vue warn]: Elakkan memutasi prop secara langsung'.

Cara menyelesaikan ralat '[Vue warn]: Elakkan memutasi prop secara langsung'.

Aug 17, 2023 pm 05:21 PM
vue prop mutating

解决“[Vue warn]: Avoid mutating a prop directly”错误的方法

Cara menyelesaikan ralat "[Vue warn]: Elakkan memutasi prop secara langsung"

Apabila menggunakan Vue.js untuk membangunkan projek, kita mungkin menghadapi mesej amaran biasa: "[Vue warn]: Elakkan memutasi prop secara langsung". Maksud mesej amaran ini ialah kita tidak seharusnya menukar secara langsung nilai atribut props, tetapi harus membiarkan komponen induk menukar nilai props dengan mencetuskan peristiwa. Dalam artikel ini, kami akan meneroka punca amaran ini, dan cara membetulkannya.

  1. Analisis Sebab

Vue.js ialah rangka kerja berasaskan komponen yang melaksanakan pemindahan data dan komunikasi melalui prop dan acara antara komponen. Apabila komponen menerima prop, harta tersebut adalah baca sahaja, bermakna kita tidak boleh menukar nilainya secara langsung. Jika kami cuba mengubah suai nilai prop secara langsung, Vue.js akan mengeluarkan amaran untuk mengingatkan kami supaya tidak berbuat demikian.

Sebab reka bentuk ini adalah untuk memastikan aliran data antara komponen adalah jelas dan boleh dikesan. Dengan menghantar data melalui atribut props, kita dapat melihat dengan jelas komponen induk mana data dihantar ke komponen anak mana, mengelakkan kekeliruan dan bahaya tersembunyi.

  1. Penyelesaian

Untuk menyelesaikan masalah amaran ini, kami mempunyai beberapa kaedah yang mungkin.

2.1 Menggunakan atribut yang dikira

Vue.js menyediakan atribut yang dikira yang boleh mengira nilai baharu berdasarkan nilai atribut props. Kami boleh menggunakan ciri ini untuk menyelesaikan masalah amaran ini. Langkah khusus adalah seperti berikut:

<template>
  <div>
    <p>The value of propsData is: {{ propsData }}</p>
    <button @click="updatePropsData">Update propsData</button>
  </div>
</template>

<script>
export default {
  props: ['propData'],
  computed: {
    propsData() {
      return this.propData;
    }
  },
  methods: {
    updatePropsData() {
      // 发出一个事件,通知父组件更新propsData的值
      this.$emit('update:propData', 'new value');
    }
  }
}
</script>
Salin selepas log masuk

Dalam kod di atas, kami mentakrifkan atribut propsData yang dikira untuk mengembalikan nilai propData. Apabila butang diklik, kaedah updatePropsData dicetuskan dan peristiwa dihantar ke komponen induk melalui kaedah $emit. Nama acara ini ialah "kemas kini:propData", dan parameter yang diluluskan ialah 'nilai baharu'.

Dalam komponen induk, kita perlu mendengar acara ini dan menukar nilai propData dalam fungsi pengendali acara. Kod khusus adalah seperti berikut:

<template>
  <div>
    <child-component :propData="propData" @update:propData="updatePropData"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      propData: 'initial value'
    }
  },
  methods: {
    updatePropData(newValue) {
      this.propData = newValue;
    }
  }
}
</script>
Salin selepas log masuk

Dalam komponen induk, kami memperkenalkan komponen anak ChildComponent dan menyerahkan sifat propData kepadanya. Ia juga penting untuk ambil perhatian bahawa kami menggunakan arahan v-on untuk mendengar peristiwa "kemas kini:propData" yang dicetuskan oleh komponen anak dan memanggil kaedah updatePropData untuk mengemas kini nilai propData.

Dengan cara ini, kami melaksanakan komponen anak untuk memberitahu komponen induk untuk mengemas kini nilai atribut props melalui acara, dengan itu mengelakkan mesej amaran yang disebabkan oleh mengubah suai nilai props secara langsung.

2.2 Gunakan arahan model v

Vue.js menyediakan model v arahan yang mudah yang boleh mengikat data dalam kedua-dua arah antara komponen induk dan anak. Kita boleh menggunakan arahan ini untuk menyelesaikan masalah amaran. Langkah-langkah khusus adalah seperti berikut:

<template>
  <div>
    <p>The value of propData is: {{ propData }}</p>
    <input v-model="propData">
  </div>
</template>

<script>
export default {
  props: ['propData']
}
</script>
Salin selepas log masuk

Dalam kod di atas, kami mentakrifkan kotak input input dan menggunakan arahan model-v untuk mengikat nilai kotak input secara dwiarah kepada atribut propData. Dengan cara ini, apabila kita mengubah suai nilai dalam kotak input, nilai propData akan dikemas kini secara automatik.

Dalam komponen induk, kita perlu menghantar propData kepada komponen anak, mendengar acara input komponen anak, dan menetapkan nilai propData dalam pengendali acara. Kod khusus adalah seperti berikut:

<template>
  <div>
    <child-component v-model="propData"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      propData: 'initial value'
    }
  }
}
</script>
Salin selepas log masuk

Dalam komponen induk, kami menggunakan arahan model v untuk mengikat propData secara dwiarah kepada komponen anak. Dengan cara ini, apabila nilai komponen anak berubah, nilai propData akan dikemas kini dengan sewajarnya.

Dengan menggunakan arahan model v, kami melaksanakan pengikatan data dua hala antara komponen anak dan komponen induk, dengan itu mengelakkan mesej amaran yang disebabkan oleh mengubah suai secara langsung nilai prop.

  1. Ringkasan

Mesej amaran "[Vue warn]: Elakkan memutasi prop secara langsung" muncul untuk memastikan aliran data antara komponen adalah jelas dan boleh dikesan. Untuk menyelesaikan masalah ini, kita boleh menggunakan atribut yang dikira atau arahan model v untuk melaksanakan komunikasi data dan pengikatan dua hala antara komponen anak dan komponen induk.

Dengan mengikuti amalan terbaik ini, kami boleh memastikan apl Vue.js kami berjalan dengan lebih baik dan mengurangkan potensi isu.

Atas ialah kandungan terperinci Cara menyelesaikan ralat '[Vue warn]: Elakkan memutasi prop secara langsung'.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara merujuk fail js dengan vue.js Cara merujuk fail js dengan vue.js Apr 07, 2025 pm 11:27 PM

Terdapat tiga cara untuk merujuk kepada fail JS dalam vue.js: Secara langsung tentukan jalan menggunakan & lt; skrip & gt; tag ;; import dinamik menggunakan cangkuk kitaran hayat yang dipasang (); dan mengimport melalui Perpustakaan Pengurusan Negeri VUEX.

Vue menyedari kesan menatal marquee/teks Vue menyedari kesan menatal marquee/teks Apr 07, 2025 pm 10:51 PM

Melaksanakan kesan menatal marquee/teks di VUE, menggunakan animasi CSS atau perpustakaan pihak ketiga. Artikel ini memperkenalkan cara menggunakan animasi CSS: Buat teks tatal dan bungkus teks dengan & lt; div & gt;. Tentukan animasi CSS dan tetapkan limpahan: tersembunyi, lebar, dan animasi. Tentukan frasa key, set Transform: TranslateX () pada permulaan dan akhir animasi. Laraskan sifat animasi seperti tempoh, kelajuan tatal, dan arah.

Apa maksudnya untuk memuatkan vue malas? Apa maksudnya untuk memuatkan vue malas? Apr 07, 2025 pm 11:54 PM

Dalam vue.js, pemuatan malas membolehkan komponen atau sumber dimuatkan secara dinamik seperti yang diperlukan, mengurangkan masa pemuatan halaman awal dan meningkatkan prestasi. Kaedah pelaksanaan khusus termasuk menggunakan & lt; menyimpan-Alive & gt; dan & lt; komponen adalah & gt; komponen. Harus diingat bahawa pemuatan malas boleh menyebabkan masalah fouc (skrin percikan) dan harus digunakan hanya untuk komponen yang memerlukan pemuatan malas untuk mengelakkan overhead prestasi yang tidak perlu.

Apakah yang dimaksudkan dengan nilai komponen Vue? Apakah yang dimaksudkan dengan nilai komponen Vue? Apr 07, 2025 pm 11:51 PM

Nilai lulus komponen Vue adalah mekanisme untuk meluluskan data dan maklumat antara komponen. Ia boleh dilaksanakan melalui sifat (props) atau peristiwa: Props: Mengisytiharkan data yang akan diterima dalam komponen dan lulus data dalam komponen induk. Peristiwa: Gunakan kaedah $ emit untuk mencetuskan peristiwa dan dengarlah dalam komponen induk menggunakan Arahan V-On.

Cara menggunakan bootstrap di vue Cara menggunakan bootstrap di vue Apr 07, 2025 pm 11:33 PM

Menggunakan bootstrap dalam vue.js dibahagikan kepada lima langkah: Pasang bootstrap. Import bootstrap di main.js. Gunakan komponen bootstrap secara langsung dalam templat. Pilihan: Gaya tersuai. Pilihan: Gunakan pemalam.

Cara Menggunakan Pagination Vue Cara Menggunakan Pagination Vue Apr 08, 2025 am 06:45 AM

Pagination adalah teknologi yang memisahkan set data besar ke dalam halaman kecil untuk meningkatkan prestasi dan pengalaman pengguna. Di VUE, anda boleh menggunakan kaedah terbina dalam berikut untuk paging: Kirakan jumlah halaman: TotalPages () Traversal Page Number: V-For Directive Untuk menetapkan halaman semasa: CurrentPage Dapatkan data halaman semasa: CurrentPagedata ()

Cara kembali ke halaman sebelumnya oleh Vue Cara kembali ke halaman sebelumnya oleh Vue Apr 07, 2025 pm 11:30 PM

Vue.js mempunyai empat kaedah untuk kembali ke halaman sebelumnya: $ router.go (-1) $ router.back () menggunakan & lt; router-link to = & quot;/& quot; Komponen Window.History.Back (), dan pemilihan kaedah bergantung pada tempat kejadian.

Cara Menggunakan Watch di Vue Cara Menggunakan Watch di Vue Apr 07, 2025 pm 11:36 PM

Pilihan Watch di Vue.js membolehkan pemaju mendengar perubahan dalam data tertentu. Apabila data berubah, tontonkan mencetuskan fungsi panggil balik untuk melakukan paparan kemas kini atau tugas lain. Pilihan konfigurasinya termasuk segera, yang menentukan sama ada untuk melaksanakan panggilan balik dengan serta -merta, dan mendalam, yang menentukan sama ada untuk mendengarkan secara rekursif terhadap objek atau tatasusunan.

See all articles