https://laracasts.com/series/learning-vue-step-by-step シリーズを開始しました。次のエラーが発生して、Vue、Laravel、AJAX クラスを停止しました:
vue.js:2574 [Vue の警告]: 親コンポーネントが再レンダリングされるたびに値が上書きされるため、props を直接変更しないでください。代わりに、プロパティの値に基づいてデータまたは計算されたプロパティを使用します。小道具の変更: "list" (コンポーネント内にあります)
このコードは main.js
にあります リーリーリスト プロパティをオーバーライドするときに問題が created() にあることはわかっていますが、Vue を初めて使用するため、問題を修正する方法がまったくわかりません。誰かがそれを修正する方法(そしてその理由を説明してください)を知っていますか?
Vue モードは、
props
がダウン、events
がアップです。簡単そうに聞こえますが、カスタム コンポーネントを作成するときに忘れがちです。Vue 2.2.0 以降では、v -model ( 計算されたプロパティ を使用) を使用できます。この組み合わせにより、コンポーネント間にシンプルでクリーンで一貫したインターフェイスが作成されることがわかりました:
props
は応答性を維持します (つまり、コンポーネントは複製されず、変更が検出されたときにローカル コピーを更新するためにwatch
関数も必要ありません)。 。計算されたプロパティを使用すると、セッターとゲッターを個別に定義できます。これにより、
リーリーTask
コンポーネントを次のように書き換えることができます:model プロパティは、関連付けられた
リーリーprop
とv-model
、および変更時にどのイベントが発行されるかを定義します。次に、次のように親コンポーネントからこのコンポーネントを呼び出すことができます:listLocal
計算プロパティは、コンポーネント内で単純なゲッターおよびセッター インターフェイスを提供します (プライベート変数と考えてください)。#task-template
では、listLocal
をレンダリングでき、リアクティブなままになります (つまり、parentList
が変更されると、Task コンポーネントが更新されます)。 。また、セッター (例:
this.listLocal = newList
) を呼び出してlistLocal
を変更することもできます。これにより、変更が親に送信されます。このパターンの利点は、
listLocal
をTask
の子コンポーネント (v-model
を使用) に渡して、子コンポーネント コンテンツは最上位コンポーネントに伝播されます。たとえば、タスク データに何らかの変更を加える別の
EditTaskEditTask
コンポーネントがあるとします。同じv-model
と計算されたプロパティ パターンを使用することで、(v-model
を使用して)listLocal
をコンポーネントに渡すことができます。 リーリーが変更を発行すると、
listLocal
でset()
が適切に呼び出され、それによってイベントが最上位に伝播されます。同様に、EditTask
コンポーネントもv-model
を使用して他のサブコンポーネント (フォーム要素など) を呼び出すことができます。これは、プロップをローカルで変更することが Vue 2 ではアンチパターンとみなされているという事実と関係があります。
プロパティをローカルで変更したい場合は、初期値として
リーリーprops
code> value を使用してdata でフィールドを宣言し、コピーを変更します。
詳しくは、Vue.js 公式ガイドをご覧ください。
注 1: prop と data
reactivityには
を使用しないでください。 # ##、今すぐ:### リーリー使用相同的名称> 注 2: props と
については いくつかの混乱があると思うので、# を参照することをお勧めします。 ##この スレッド