Posted on under Vue by Owen Conti.
Here's a quick recap on validating props in Vue. All of these examples use Vue's built-in prop validation.
Note: The prop validation does not get bundled when building in a
productionenvironment. This means the prop validation acts as a warning during development, but has no impact when shipped to your users.
Validate that the
name prop must be an (optional) string:
1{2 props: {3 name: String4 }5}
Validate that the
name prop must be either an (optional) string or number:
1{2 props: {3 name: [String, Number]4 }5}
Note: For doing anything other than basic type checking, you need to set the value of your prop to an object. Be aware of the new syntax in the upcoming examples.
By default, props in Vue are optional. When an optional prop is not passed into the component, the prop's value will be
undefined. If you want to provide a default value for props that are not passed, you can do so via the
default key. The following example will set the
name prop to "Hello", if
name is not passed into the component:
1{2 props: {3 name: {4 type: String,5 default: 'Hello'6 }7 }8}
When setting the default value to be either an object or an array, you must ensure to wrap the value in a function. By doing this, you will create a new instance of the object or array for each instance of the component:
1{ 2 props: { 3 person: { 4 type: Object, 5 default: () => ({ 6 name: 'John' 7 }) 8 } 9 }10}
If you need a prop to be required, you can remove the
default key and replace it with a
required boolean value:
1{2 props: {3 person: {4 type: Object,5 required: true6 }7 }8}
Sometimes you will need to perform custom validation on a prop. For example, you may have a
status prop that can only be one of three options:
pending,
in-progress, or
complete. Any other value passed into the
status prop should be considered invalid.
To run this custom validator, you can use a
validator function on the props object. The
validator function takes an argument, which is the value of the prop being validated. For our example, the
value argument is the value of the
status prop:
1{2 props: {3 person: {4 type: Object,5 required: true,6 validator: value => ['pending', 'in-progress', 'complete'].includes(value)7 }8 }9}
Make sure you read through Vue's official documentation on prop validation: https://vuejs.org/v2/guide/components-props.html#Prop-Validation
Hopefully you found this article useful! If you did, share it on X!
Found an issue with the article? Submit your edits against the repository.