--- title: defineModel Creates Hidden Modifier Props - Avoid Naming Conflicts impact: MEDIUM impactDescription: defineModel automatically adds hidden *Modifiers props that can conflict with your prop names type: gotcha tags: [vue3, v-model, defineModel, modifiers, props, naming] --- # defineModel Creates Hidden Modifier Props - Avoid Naming Conflicts **Impact: MEDIUM** - When using `defineModel()`, Vue automatically creates hidden props with the suffix `Modifiers` for each model. For example, a model named `title` will create both a `title` prop AND a hidden `titleModifiers` prop. This can cause unexpected conflicts if you have other props ending in "Modifiers". ## Task Checklist - [ ] Don't create props that end with "Modifiers" when using defineModel - [ ] Be aware that each defineModel creates an associated *Modifiers prop - [ ] When using multiple models, avoid names where one model could conflict with another's modifier prop - [ ] Document custom modifiers to help consumers understand available options **Problem - Hidden props created automatically:** ```vue ``` **Parent using modifiers:** ```vue ``` **Correct - Accessing modifiers in child:** ```vue ``` ## Multiple Models and Potential Conflicts ```vue ``` **Best Practice - Clear, distinct model names:** ```vue ``` ## Documenting Custom Modifiers When creating components with custom modifier support, document them clearly: ```vue ``` ## Reference - [Vue.js Component v-model - Modifiers](https://vuejs.org/guide/components/v-model.html#handling-v-model-modifiers) - [Vue.js RFC - defineModel](https://github.com/vuejs/rfcs/discussions/503)