Rumah > hujung hadapan web > View.js > teks badan

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

WBOY
Lepaskan: 2023-08-20 13:52:48
asal
1406 orang telah melayarinya

如何解决“[Vue warn]: Avoid mutating a prop directly”错误

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

Dalam pembangunan Vue, kami sering menghadapi mesej amaran biasa: "[Vue warn]: Elakkan memutasi prop secara langsung". Maksud mesej amaran ini ialah kita tidak seharusnya mengubah suai nilai props secara langsung, tetapi harus mengubah suainya melalui kaedah lain.

Untuk lebih memahami dan menyelesaikan masalah ini, mari lihat contoh kod khusus:

<template>
  <div>
    <h1>{{ message }}</h1>
    <button @click="changeMessage">Change Message</button>
  </div>
</template>

<script>
export default {
  props: {
    message: String
  },
  methods: {
    changeMessage() {
      this.message = "New Message"; // 直接修改props的值
    }
  }
};
</script>
Salin selepas log masuk

Dalam kod ini, kami mentakrifkan prop bernama "message", dan kemudian dalam kaedah "changeMessage" Nilai props diubah suai secara langsung. Walau bagaimanapun, pendekatan ini tidak disyorkan.

Mengapa tidak disyorkan untuk mengubah suai nilai props secara langsung? Ini kerana props, sebagai aliran data sehala, hanya boleh dihantar daripada komponen induk kepada komponen anak tidak boleh mengubah suai nilai props secara langsung, kerana ini boleh menyebabkan data tidak konsisten dan sukar untuk dilakukan. -pepijat pepijat.

Jadi, bagaimana untuk menyelesaikan mesej amaran ini? Penyelesaiannya ialah menggunakan kaedah "memancarkan" yang disediakan oleh Vue untuk menghantar acara, dan kemudian mendengar acara ini dalam komponen induk untuk mengubah suai nilai prop. Mari ubah suai kod di atas:

<template>
  <div>
    <h1>{{ message }}</h1>
    <button @click="changeMessage">Change Message</button>
  </div>
</template>

<script>
export default {
  props: {
    message: String
  },
  methods: {
    changeMessage() {
      this.$emit("update:message", "New Message"); // 发送一个事件
    }
  }
};
</script>
Salin selepas log masuk

Dalam kod di atas, kami menggunakan this.$emit("update:message", "New Message") untuk menghantar acara bernama "kemas kini:mesej" dan menghantar mesej baharu sebagai parameter. Kemudian dengar acara ini dalam komponen induk dan ubah suai nilai prop dalam fungsi panggil balik acara.

<template>
  <div>
    <child-component :message="parentMessage" @update:message="updateParentMessage"></child-component>
  </div>
</template>

<script>
import ChildComponent from "./ChildComponent.vue";
export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      parentMessage: "Hello"
    };
  },
  methods: {
    updateParentMessage(newMessage) {
      this.parentMessage = newMessage; // 在事件回调函数中修改props的值
    }
  }
};
</script>
Salin selepas log masuk

Dalam komponen induk, kami menghantar "parentMessage" sebagai prop kepada komponen anak dan menambah pendengar acara "@update:message" pada komponen anak. Apabila komponen anak menghantar acara ini, komponen induk akan memanggil kaedah "updateParentMessage" untuk mengubah suai nilai "parentMessage", sekali gus merealisasikan pengubahsuaian props.

Dengan menggunakan kaedah "memancarkan" dan mendengar peristiwa, kami mengelak daripada mengubah suai nilai props secara langsung, dengan itu menyelesaikan mesej amaran "[Vue warn]: Elakkan memutasi prop secara langsung".

Ringkasnya, kita harus membangunkan tabiat untuk tidak mengubah suai nilai props secara langsung Gunakan kaedah "emit" dalam komponen anak untuk menghantar acara, dan dengar acara ini dalam komponen induk untuk mengubah suai nilai prop. Ini memastikan ketekalan data dan menjadikan penyelenggaraan dan penyahpepijatan lebih mudah.

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!

Label berkaitan:
sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan