vue中computed和watch的對比是一個頗有意思的話題。
看過官網教程之後,咱們每每更傾向多使用computed。computed優勢不少,卻在某些時候不太適用。
今天咱們就稍微討論一下,當咱們在編寫一個子組件時,須要同步父子組件的屬性props時,computed與watch的選用。
舉個例子好了。
首先看computed:javascript
props: { letter: { type: String, default: a } }, computed: { innerLetter: { get () { return this.letter; } set (value) { this.$emit('change-letter', value); } } }
再來看看watch:vue
props: { letter: { type: String, default: a } }, data () { return { innerLetter: this.letter } } watch: { letter (value) { this.innerLetter = letter; } } methods: { changeLetter (value) { this.$emit('change-letter', value); } }
兩種寫法要實現的功能都是要實現向子組件傳入的props可以與父組件保持一致,這兩種寫法都很常見。
咱們來看看他們的區別是什麼:java
computed寫法,子組件的渲染依賴父組件對change-letter的響應,因此當編寫強交互組件,或獨立打包的外部plugin時,應謹慎使用或儘可能不使用。性能
watch寫法,在子組件僅read父組件的值,而不須要對其值進行修改時,徹底能夠用computed替代,computed性能更好,寫法更簡單。this
ok,兩種寫法的區別你get到了麼?代理