vue prop双方向バインドの実現
5708 ワード
vueは一方向データストリームであることはよく知られているため、親コンポーネントがpropを介してサブコンポーネントに伝達される値を直接変更することは一般的ではない.強引に修正すれば、次の警告メッセージはきっと見慣れないでしょう.
しかし、実際の開発ではpropを双方向にバインドする必要がある場合がよくあります.最も一般的なアプリケーションシーンはdialogボックスです.閉じるボタンをクリックすると、親コンポーネントからの制御dialogの表示または非表示のprop値を変更する必要があります.
解決策:
例を挙げます.
親コンポーネント:
実際上の
サブアセンブリ:
この方法に加えて、dataに新しい変数を宣言してpropを格納し、watchでpropの変更を傍受し、属性を計算することでpropの値を動的に変更することもできます.
転載先:https://juejin.im/post/5c413a5bf265da613572d4e6
[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value.
しかし、実際の開発ではpropを双方向にバインドする必要がある場合がよくあります.最も一般的なアプリケーションシーンはdialogボックスです.閉じるボタンをクリックすると、親コンポーネントからの制御dialogの表示または非表示のprop値を変更する必要があります.
解決策:
.sync
修飾子ドキュメントリファレンスを使用例を挙げます.
親コンポーネント:
<father :isShow.sync = 'isShow'>father>
実際上の
:isShow.sync
は:update:isShow
の略ですサブアセンブリ:
<template>
<div class="child" v-if="isShow">
<div> div>
<div class="closeBtn" @click = "close"> div>
<div>
template>
<script>
export default {
props: ['isShow'],
methods: {
close(){
this.$emit("update:isShow", false);
}
}
}
script>
this.$emit("update:isShow", false);
によってpropの新しい値を親コンポーネントに渡すことによって、簡単なpropの双方向バインドが実現される.この方法に加えて、dataに新しい変数を宣言してpropを格納し、watchでpropの変更を傍受し、属性を計算することでpropの値を動的に変更することもできます.
転載先:https://juejin.im/post/5c413a5bf265da613572d4e6