Skip to content

vue/no-setup-props-destructure

disallow usages that lose the reactivity of props passed to setup

📖 Rule Details

This rule reports the destructuring of props passed to setup causing the value to lose reactivity.

<script> export default { /* ✓ GOOD */ setup(props) { watch(() => props.count, () => { console.log(props.count) }) return () => { return h('div', props.count) } } } </script>
Now loading...

Destructuring the props passed to setup will cause the value to lose reactivity.

<script> export default { /* ✗ BAD */ setup({ count }) { watch(() => count, () => { // not going to detect changes console.log(count) }) return () => { return h('div', count) // not going to update } } } </script>
Now loading...

Also, destructuring in root scope of setup() should error, but ok inside nested callbacks or returned render functions:

<script> export default { setup(props) { /* ✗ BAD */ const { count } = props watch(() => props.count, () => { /* ✓ GOOD */ const { count } = props console.log(count) }) return () => { /* ✓ GOOD */ const { count } = props return h('div', count) } } } </script>
Now loading...

🔧 Options

Nothing.

📚 Further Reading

🚀 Version

This rule was introduced in eslint-plugin-vue v7.0.0

🔍 Implementation