VueでのProps(可変状態)
8631 ワード
たんほうこうデータストリーム
すべてのpropは、親子propの間に一方向の下りバインドを形成します.親propの更新はサブコンポーネントに下に流れますが、逆にはできません.これにより、サブコンポーネントから親コンポーネントの状態が意外に変化することを防止し、アプリケーションのデータの流れが理解しにくくなります.
さらに、親コンポーネントが更新されるたびに、サブコンポーネント内のすべてのpropが最新の値にリフレッシュされます.これは、サブコンポーネントの内部でpropを変更するべきではないことを意味します.そうすれば、Vueはブラウザのコンソールで警告します.
に質問
上で発生した警告現象を簡単に述べると、多くの人が遭遇したことがあるかもしれません.
シーンの操作
親コンポーネント が決定される.から入力 である. を傍受する.
サブアセンブリ親コンポーネントから渡された は、ページは、 である.は、ポップアップモジュールが閉じると自動的に がページから投げ出される.
問題を解決するサブアセンブリプライベート変数 を定義する.は、 を確保する.
すべてのpropは、親子propの間に一方向の下りバインドを形成します.親propの更新はサブコンポーネントに下に流れますが、逆にはできません.これにより、サブコンポーネントから親コンポーネントの状態が意外に変化することを防止し、アプリケーションのデータの流れが理解しにくくなります.
さらに、親コンポーネントが更新されるたびに、サブコンポーネント内のすべてのpropが最新の値にリフレッシュされます.これは、サブコンポーネントの内部でpropを変更するべきではないことを意味します.そうすれば、Vueはブラウザのコンソールで警告します.
に質問
上で発生した警告現象を簡単に述べると、多くの人が遭遇したことがあるかもしれません.
シーンの操作
親コンポーネント
<BackLogModal :isModalOpen="isModalOpen" @closeModal="handleCloseModal"></BackLogModal>
BackLogModal
は1つの弾窓組立体である、isModalOpen
によって弾窓の開閉状態isModalOpen
は親コンポーネントの変数であり、タイプはboolean
closeModal
サブアセンブリから送信されたカスタムイベントcloseModal
サブアセンブリ
// typescript
export default class BackLogModal extends Vue {
@Prop()
private isModalOpen: boolean;
private handleConfirm(): void {
this.$Message.info('Clicked ok');
this.$emit('closeModal');
}
private handleClose(): void {
this.$Message.info('Clicked cancal');
this.$emit('closeModal');
}
}
@Prop()
属性isModalOpen
注記によって取得する.v-model
を介して属性isModalOpen
にバインドisModalOpen
の値がfalse
に設定されるため、ここで直接修正するのが親アセンブリからのisModalOpen
属性であり、props
属性は一方向データストリームであり、可変状態を有するため、警告問題を解決する
export default class BackLogModal extends Vue {
private isOpen: boolean = false;
@Prop()
private isModalOpen: boolean;
@Watch('isModalOpen')
private watchModalOpen(newVal: boolean, oldVal: boolean) {
console.log(newVal, oldVal);
if (newVal !== oldVal) {
this.isOpen = newVal;
}
}
private handleConfirm(): void {
this.$Message.info('Clicked ok');
this.$emit('closeModal');
}
private handleClose(): void {
this.$Message.info('Clicked cancal');
this.$emit('closeModal');
}
}
isOpen
とページポップアップ行バインド@Watch('isModalOpen')
を使用して親コンポーネントから受信isModalOpen
の属性を監視し、値が変更されると、ローカル変数isOpen
を更新し、弾窓の正常な開閉