[Vue warn]: Avoid mutating a prop directly
Vueで親から受け取ったpropsを直接変更しようとした際の警告
概要
Vue.jsで親コンポーネントから渡されたpropsを子コンポーネント内で直接変更しようとした際に発生する警告です。Vueは単方向データフローを採用しており、propsは読み取り専用です。
エラーメッセージ
[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.
原因
- propsへの直接代入:
this.propName = newValue - オブジェクト/配列の変更: propsで渡されたオブジェクトのプロパティを変更
- v-modelの誤用: propsに直接v-modelをバインド
- 単方向データフローの誤解: 親→子の流れを子→親で変更しようとする
解決策
1. ローカルのdataにコピー
| |
2. emitで親に通知
| |
3. computedでget/set
| |
4. オブジェクトの場合
| |
5. 配列の場合
| |
6. defineModelを使用(Vue 3.4+)
| |
よくある間違い
- propsで渡されたオブジェクトのネストしたプロパティを変更する(参照は同じなので変更は伝播するが非推奨)
- 子から親への通信にpropsを使おうとする
- v-model修飾子の使い方を誤る
関連エラー
参考リンク
Vue.js の他のエラー
この記事は役に立ちましたか?